Hola,
De curioso, investigue un poco porque tenia mis dudas sobre como se
guardan los directorios físicamente en el disco
Usando reflector sobre la clase FileSystemWatcher me di cuenta de que no
hay nada para hacerlo (a menos que exista algun truco lógico que no
conozca).
Buscando un poco mas internet, encontré esto:
Q58 How do I determine if the FILE_OBJECT represents a file or a directory
from my filter driver? Can I rely upon the FILE_DIRECTORY_FILE bit?
The determination of whether or not a given FILE_OBJECT represents a
directory is the sole domain of the file system driver. Thus, for a file
system filter driver to determine if a file is a directory, it must ask the
file system. This can be done by querying the attributes of the file (e.g.,
after it has been successfully opened by the underlying file system) or by
examining the attributes within the directory, which can be done before the
underlying file has been opened.
Options specified during create are not adequate for determining if a file
is, in fact, a directory. For example, an application may optionally specify
that the file being opened must be a directory by setting the
FILE_DIRECTORY_FILE option as part of create (this is a bit in the I/O Stack
location, Parameters.Create.Options, the low 24 bits of which are used for
file options). If the file creation is successful, the file system filter
driver can conclude that the FILE_OBJECT does represent a directory. If the
file creation is successful and the caller did not specify
FILE_DIRECTORY_FILE, however, the caller cannot presume that the file is a
directory. The FILE_NON_DIRECTORY_FILE bit can similarly be used to
determine that the given FILE_OBJECT does not represent a file.
There is one complication for those writing a file system filter driver -
they must keep in mind that some file options now combine these two bits.
For example FILE_COPY_STRUCTURED_STORAGE (which is not used but is still
present in ntifs.h for Windows XP) is defined as FILE_DIRECTORY_FILE and
FILE_NON_DIRECTORY_FILE.
Thus, the safest way to determine if a FILE_OBJECT represents a directory
remains to ask the underlying file system.
Fuente: http://www.osronline.com/article.cfm?id=17#Q58
Si lees la ultima línea, todo hace pensar que es imposible saber lo que
queres una vez que el archivo no existe. Por lo que si quisieses hacerlo
deberías hacer esta verificación *antes* de que el archivo/carpeta sea
modificado o borrado, y despues si es que se esta creando. No se si las APIs
de Windows soportan estos events pre y post cambio al file system.
Saludos,
Diego
Pd: Dato interesante que descubri cuando usaba reflector: El Filter que se
usa para poner cosas como *.txt, considera exactamente el * y el *.*, aun
cuando no deberían ser lo mismo (el segundo debería filtrar los nombres que
no contiene un punto).
El código es una cosa asi de sucia y asi de hardcodeado:
if (filter == “*” || filter == “*.*”)
return true;
// Empieza la logica real para parsear el * y el ? como debería ser…
From: [email protected] [mailto:[email protected]] On Behalf Of Pablo
Satelier
Sent: Thursday, March 12, 2009 14:02
To: [email protected]
Subject: [puntonet] Clase IO.FileSystemWatcher
Hola gente,...
estoy necesitando que la clase IO.FileSystemWatcher me notifique
unicamente los cambios en las carpetas, no en las carpetas que fueron
modificados los archivos que contiene. En cuanto a cambios me refiero a
renombrado, eliminacion o creacion de una carpeta. No se si esto se puede
hacer con el FileSystemWatcher o si existe alguna otra clase que pueda hacer
lo que necesito.
Alguna idea??
Muchas gracias de antemano !!
Saludos, Pablo.-