[C# 2008]Elenco File Aperti Con C#

venerdì 20 novembre 2009 - 08.59

mesco Profilo | Newbie

Buon giorno a tutti ,
vorrei sapere se è possibile avere una lista dei file aperti su un computer da c#, vi spiego meglio, io dovrei vedere quali file sono stati aperti da un determinato programma.
ho trovato un programma esterno che fa una cosa simile, si chiama Recent File View ma io avrei bisogno di reperire questa informazione direttamente da codice.
ho visto che l'apertura di un file lascia traccia nel registro di windows come posso fare per fare una ricerca dentro al registro con C#?
grazie

aiedail92 Profilo | Expert

Ciao

Avevo risposto tempo fa ad una domanda di questo tipo... Puoi usare questo programmino che avevo scritto (e ho leggermente modificato per questo tuo problema) che trovi in allegato.

Ecco il codice da usare:

[StructLayout(LayoutKind.Sequential)] struct FileInformation { public int ProcessID; public IntPtr FileHandle; [MarshalAs(UnmanagedType.LPWStr)] public string FileName; } // Importa la funzione dalla Dll. Inserisci il percrso completo // oppure assicurati che sia nella stessa cartella dell'eseguibile [DllImport("WhoLocked.dll")] static extern int GetProcessOpenFiles(int ProcessPid, [In(), Out()] FileInformation[] OutInfo, int MaxCount); // Questa funzione mostra fino a 100 file aperti di un processo: void ShowProcessOpenFiles(int ProcPid) { // Crea l'array dei risultati. Max 100 FileInformation[] fi = new FileInformation[100]; // Ottiene il risultato chiamando la funzione della Dll int res = GetProcessOpenFiles(ProcPid, fi, 100); // Crea la stringa del risultato StringBuilder sb = new StringBuilder(); for (int i = 0; i < res; i++) { sb.Append(fi[i].FileHandle); sb.Append(" --> "); sb.AppendLine(fi[i].FileName); } // Mostra il risultato MessageBox.Show(sb.ToString()); }

Il post thread lo trovi qui: http://www.dotnethell.it/forum/messages.aspx?ThreadID=28966 (all'ultimo post)

Il link a cui rimando non esiste più da quando ho cancellato il forum, ma lo trovi ancora nella cache di google: http://209.85.129.132/search?hl=it&source=hp&q=cache%3Ahttp%3A%2F%2Fprocoder.forumfree.net%2F%3Ft%3D38978927&btnG=Cerca+con+Google&meta=&aq=f&oq=

Luca

mesco Profilo | Newbie

Come prima cosa volevo ringraziarti per avermi risposto,
e poi volevo chiederti alcune delucidazioni, visto che non sono stato capace di utlizzare quella dll.

Come prima cosa come dovrei fare per importare in un progetto c# la tua DLL?
Seconda cosa una volta importata quale codice dovrei usare per tutti i file aperti da un mio eseguibile?

Ti spiego brevemente qual'è il mio problema:
Devo scrivere un software che ogni qual volta l'utente della macchina apre un file lui scriva su di un database che il giorno X all'ora Y l'utente della macchina ha avuto accesso al file.
usando la tua DLL posso reperire il percorso completo di un file aperto da un determinato processo, premettendo che questo file può trovarsi tranquillamente su una cartella di rete.

Grazie mille per l'aiuto

aiedail92 Profilo | Expert

Ciao

Con il metodo che ti ho dato puoi solo verificare i file aperti da un determinato programma, per vedere se funziona anche coi file di rete devi fare qualche prova tu perché io non ho modo di farlo.

Comunque non puoi monitorare una cartella o un file di rete se sei uno dei client, penso lo possa fare solo il server che ospita il file, e ci sarebbe comunque da cercare il modo per farlo...

Purtroppo non ho nemmeno modo di fare qualche prova perché già da un po' ho abbandonato Windows in favore di Linux...

Luca

Jeremy Profilo | Guru

CeccoCQ Profilo | Newbie

Ciao, riesumo il post.
Anche io avrei lo stesso problema solo che il link dove c'è WhoLocked.dll è offline.
Tu avresti gentilmente una copia di quel file da passarmi?
Ne ho bisogno davvero infinitamente.......

aiedail92 Profilo | Expert

Ciao

Il file lo trovi in allegato in un mio messaggio precedente in questo thread. Comunque lo allego anche a quest'altro messaggio.

È un piacere sapere che quello che ho fatto sta servendo a qualcuno

Luca
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5