Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Bjecas

Monitorizar abertura de ficheiros

Recommended Posts

Bjecas

Boas!

Num projecto que estou a desenvolver, precisava de saber quando um ficheiro é aberto. Mais concretamente, a ideia é ter a minha aplicação a correr, e queria que fosse despoletado um evento quando um ficheiro que se encontra num directório (ou possivelmente sub-directórios) fosse aberto pelo utilizador (sem relação directa com o meu programa, ou seja, não é o meu programa que abre o ficheiro).

A solução mais "elegante" seria usar algo como um FileSystemWatcher, mas que permitisse um evento "onOpen". Espero estar a fazer-me entender.

Imagino que isto vá-me dar pano para mangas... Tanto quanto sei, não existe na .Net framework nada do género, pelo que a solução passaria por usar a API do windows, e confesso ser um completo amador nesse aspecto. Será que alguém me pode dar umas luzes?  :dontgetit:

Share this post


Link to post
Share on other sites
inginheiiro

Boas!

Num projecto que estou a desenvolver, precisava de saber quando um ficheiro é aberto. Mais concretamente, a ideia é ter a minha aplicação a correr, e queria que fosse despoletado um evento quando um ficheiro que se encontra num directório (ou possivelmente sub-directórios) fosse aberto pelo utilizador (sem relação directa com o meu programa, ou seja, não é o meu programa que abre o ficheiro).

A solução mais "elegante" seria usar algo como um FileSystemWatcher, mas que permitisse um evento "onOpen". Espero estar a fazer-me entender.

Imagino que isto vá-me dar pano para mangas... Tanto quanto sei, não existe na .Net framework nada do género, pelo que a solução passaria por usar a API do windows, e confesso ser um completo amador nesse aspecto. Será que alguém me pode dar umas luzes?  :dontgetit:

a) existe wrapper nativo em .NET

http://www.java2s.com/Tutorial/CSharp/0300__File-Directory-Stream/UseFileSystemWatchertodetectfilechanges.htm

:) É trivial a implementação.


I used to have a life ... but i bought a programmable machine in 1982 ...

Share this post


Link to post
Share on other sites
jpaulino

Que tipo de ficheiro é ?

Provavelmente podes monotoriza os processos em aberto (task manager).

Share this post


Link to post
Share on other sites
Bjecas

Estou agora a experimentar o FileSystemWatcher, embora não esteja a conseguir despoletar o evento que quero (ou seja, quando outra aplicação abre um ficheiro num directorio monitorizado). Pelo menos para mim, a implementação não está a ser assim tão trivial...  :)

Que tipo de ficheiro é ?

Provavelmente podes monotoriza os processos em aberto (task manager).

O tipo de ficheiro pode variar, assim como o programa que o abre. Preferia não estar a considerar todas essas variações, porque senão será um autêntico caos... A única coisa que os ficheiros têm em comum é estarem num determinado directório.

Share this post


Link to post
Share on other sites
inginheiiro

Os eventos possiveis estão bem definidos.

Changed Occurs when a file or directory in the specified Path is changed. 

Created Occurs when a file or directory in the specified Path is created. 

Deleted Occurs when a file or directory in the specified Path is deleted. 

Error Occurs when the internal buffer overflows. 

Renamed Occurs when a file or directory in the specified Path is renamed.

Não existe nenhum evento de Leitura .

Só são despoletados eventos de alteração de estado.


I used to have a life ... but i bought a programmable machine in 1982 ...

Share this post


Link to post
Share on other sites
Bjecas

Não existe nenhum evento de Leitura .

Só são despoletados eventos de alteração de estado.

Exacto, por isso não estou a ver como o poderia usar...

Share this post


Link to post
Share on other sites
inginheiiro

Exacto, por isso não estou a ver como o poderia usar...

As "limitações" que "enuncias" têm a ver com o desenho do FileSystem e SO.  Tanto em Nix* como em windows Já agora.

A abertura de um ficheiro (com permissões associdas obviamente) para leitura não deve despoletar nehum evento como é natural.


I used to have a life ... but i bought a programmable machine in 1982 ...

Share this post


Link to post
Share on other sites
Bjecas

A questão é que é possível desencadear uma acção quando um ficheiro é aberto. Software como os anti-virus ou filemonitors (exemplo) fazem-no certamente.

O meu problema é como conseguir esta funcionalidade.

No meu primeiro post referia que um FileSystemWatcher não era adequado porque precisaria de ter associado um event "onOpen" ou do género. Quando referiste essa possibilidade ainda investiguei a alteração do timestamp do "Last Access", mas mesmo que esta funcionalidade esteja activada, pode demorar até uma hora para ser actualizada (segundo MSDN), o que a torna inútil para o fim a que se destina, assim que está definitivamente de parte...

Share this post


Link to post
Share on other sites
inginheiiro

A questão é que é possível desencadear uma acção quando um ficheiro é aberto. Software como os anti-virus ou filemonitors (exemplo) fazem-no certamente.

O meu problema é como conseguir esta funcionalidade.

No meu primeiro post referia que um FileSystemWatcher não era adequado porque precisaria de ter associado um event "onOpen" ou do género. Quando referiste essa possibilidade ainda investiguei a alteração do timestamp do "Last Access", mas mesmo que esta funcionalidade esteja activada, pode demorar até uma hora para ser actualizada (segundo MSDN), o que a torna inútil para o fim a que se destina, assim que está definitivamente de parte...

os antivirus substituiem alguns pontos do filesystem. literalmente.

Não funcionam sobre o prisma que estás a pensar.


I used to have a life ... but i bought a programmable machine in 1982 ...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.