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

Bjecas

Monitorizar abertura de ficheiros

9 mensagens neste tópico

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que tipo de ficheiro é ?

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora