Intercettare qualsiasi salvataggio file su win

giovedì 11 febbraio 2010 - 11.11

almax Profilo | Junior Member

Salve, è possibile intercettare tramite applicazione che gira in background qualsisasi salvataggio che viene fatto su win?
potendo anche distinguere le estensioni ?

Quale strada devo prendere?

Grazie

MarKonE Profilo | Guru

Ciao,

linguaggio ? Versione framework ? Altri dettagli utili ?

Help us to help you

My Blog... http://blogs.dotnethell.it/Mark/

almax Profilo | Junior Member

Intanto grazie per l'interesse ..

Linguaggio Vbnet Framework=> 2.0
Mi servirebbe capire quando win crea un file ex novo ed eventualmente quando sovrascrive un vecchio file ..
Esempio apro notepad scrivo salvo il file con nome appena salvato vorrei poter eseguire un'operazione..
esempio 2 apro file modifico salvo, come sopra vorrei poter eseguire un'operazione ..

MarKonE Profilo | Guru

Ciao, ti interessa monitorare una specifica cartella o intercettare QUALSIASI evento di salvataggio a livello di sistema operativo ?

Potresti per favore spiegarmi un po' meglio cosa devi ottenere ?

Grazie

My Blog... http://blogs.dotnethell.it/Mark/

MarKonE Profilo | Guru

Una classe utile potrebbe essere la FileSystemWatcher :

http://msdn.microsoft.com/it-it/library/system.io.filesystemwatcher%28VS.80%29.aspx

Dipende però dal contesto e da quello che ti serve di preciso.


Ciao!

My Blog... http://blogs.dotnethell.it/Mark/

almax Profilo | Junior Member

Interessante, si avvicina molto alla soluzione .. Ti spiego quello che dovrei fare :
Apro il BlockNote e scrivo dei contenuti, vado su salva con nome e scelgo il mio nome al file e faccio salva ..
Appena salvato il file vorrei si aprisse una form che chiede se archiviare il file o no in una banca dati, la cosa potrebbe servire per file del pacchetto office, per file pdf etc etc .. Se decido di archiviare scelgo genere .. (varie opzioni) e scrivo su db un record con i dati del file data di creazione, titolo, peso, etc etc ..
Seconda possibilità, credo che la classe mi viene in aiuto, apro il vecchio file modifico il contenuto e risalvo intercetto l amodifica ed aggiorno i dati del record su db ... (il tutto perchè pensavo di inserire il file all'interno del db in campo blob per avere l'archivio a disposizione in maniera completa)...

Grazie

MarKonE Profilo | Guru

La cosa non è così banale

Secondo me gli approcci sono due.

1 - Mediante la classe FileSystemWatcher puoi tenere sotto controllo qualsiasi attività di scrittura e modifica di qualsiasi cartella.
La cartella monitorata deve essere definita a priori... e qualsiasi attività di I/O riguardante altre cartelle non verrà presa in considerazione.

2 - Intercettare gli eventi del sistema operativo che gestiscono TUTTE le operazioni di I/O.

A mio avviso il primo caso è il più semplice da implementare ma ti impone di conoscere a priori il percorso delle cartelle monitorate.
Il secondo caso è più invasivo e meno semplice da implementare. Sto ancora cercando il sistema per intercettare i relativi eventi del sistema operativo ma non l'ho ancora trovato.

Personalmente, ammesso che per te sia una strada percorribile, limiterei l'intercettazione ad un numero limitato, ma preciso, di cartelle.
Potresti monitorare per esempio il Desktop, la cartella Documenti ed eventualmente una precisa share di rete.

In questo modo senza essere costretto a scomodare il sistema operativo potresti ottenere ciò che cerchi...ed anche archiviare automaticamente tutti i file salvati in una certa cartella. Tale sistema, unito ad un minimo di istruzione agli utenti, dovrebbe funzionare senza particolari difficoltà.

Cosa ne dici ?

Ciaooooo

My Blog... http://blogs.dotnethell.it/Mark/

almax Profilo | Junior Member

Si come soluzione non è male, ti chiedo questo, ma se io le cartelle le vado a rilevare dal db? Nel momento che io ho archiviato il file ho la radice della directory, l'unicva cosa che mi blocca è sul primo salvataggio ..
Con la classe watcher viene monitorato anche la nuova creazione di una file .. cioè se io faccio salva con nome e scelgo la directory monitorata posso catturare l'evento ? Le cartelle monitorate se ad esempio decido documenti è automatico che vado a beccare anche le sottocartelle o no ?

Per la seconda soluzione dovrei utilizzare le API ?

Grazie

MarKonE Profilo | Guru

>Si come soluzione non è male, ti chiedo questo, ma se io le cartelle
>le vado a rilevare dal db? Nel momento che io ho archiviato il
>file ho la radice della directory, l'unicva cosa che mi blocca
>è sul primo salvataggio ..

Infatti a priori devi "sapere" quali sono le cartelle interessate.

>Con la classe watcher viene monitorato anche la nuova creazione
>di una file .. cioè se io faccio salva con nome e scelgo la directory
>monitorata posso catturare l'evento ?

Per essere precisi...non intercetti l'evento scatenato dalla funzione salva con nome... bensì *dopo* che è stato salvato il file intercetti la scrittura dello stesso sulla cartella.

In parole povere è la cartella ad essere monitorata costantemente..non la funzione Salva del software.


>se ad esempio decido documenti è automatico che vado a beccare
>anche le sottocartelle o no ?

Lo puoi decidere tu tramite la la proprietà IncludeSubdirectories : http://msdn.microsoft.com/it-it/library/system.io.filesystemwatcher.includesubdirectories(VS.80).aspx

Leggi qui per maggiore chiarezza sulla classe FileSystemWatcher : http://msdn.microsoft.com/it-it/library/system.io.filesystemwatcher(VS.80).aspx


>Per la seconda soluzione dovrei utilizzare le API ?

Credo proprio di si perchè non ho trovato la classe specifica.

>Grazie

Ciao!

My Blog... http://blogs.dotnethell.it/Mark/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5