2010-03-21 19 views
11

qualcuno sa come controllare se un file o una directory è o un collegamento simbolico , Junction Point, Mount Point o hard link?Rileva i collegamenti simbolici, punti di giunzione, punti di montaggio e collegamenti reali

Per quanto ne so, vengono rilevati collegamenti simbolici controllando un file per il suo attributo "ReparsePoint". I punti di giunzione vengono rilevati controllando una directory per l'attributo "ReparsePoint". Quindi se l'attributo "ReparsePoint" è impostato su un file, deve essere un collegamento simbolico, altrimenti se è impostato su una directory può essere solo un punto di congiunzione ... giusto?

Buono finora, ma non ho ancora idea di come rilevare "Punti di montaggio" e "Collegamenti duri". Qualcuno può dirmi come fare questo?

risposta

10

Collegamenti simbolici, punti di giunzione e punti di montaggio sono tutti esempi di punti di analisi diversi. Gli hard link, tuttavia, sono solo file regolari. Su NTFS tutti i file sono hard link. È possibile rilevare che un file ha più collegamenti fisici che puntano ad esso, ma non esiste un "file reale" a cui punta. Puoi pensare agli hard link come nomi diversi per lo stesso file.

Ecco alcune informazioni su come accedere i punti di analisi da C#: http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print

Ecco alcune informazioni su come farlo in C: http://blog.kalmbach-software.de/2008/02/

+0

Ok, questo significa che se un fileA.txt e un file PDF FileB.txt puntano a FileA.txt non c'è modo di rilevare che FileB.txt è un disco rigido Link? – Alexander

+6

Entrambi sono collegamenti reali. – akappa

+0

Ok, quindi c'è un modo per rilevare i punti di mount? – Alexander

5

hard link:

È possibile rilevare se più nomi puntano allo stesso "blocco dati" o "contenuto di file" richiamando la funzione API Win32 GetFileInformationByHandle. Il membro nNumberOfLinks della tornata BY_HANDLE_FILE_INFORMATION struttura contiene il numero totale di link

punti di montaggio:

È possibile scorrere tutti i punti di montaggio su un volume utilizzando FindFirstVolumeMountPoint e FindNextVolumeMountPoint. Anche FindVolumeMountPointClose deve essere utilizzato per chiudere l'handle di ricerca.

Da .NET

Fare questo da .NET richiederà un po 'di P/Invoke magia

1

Si prega di consultare la mia domanda NTFS Junctions, trouble understanding the API. È una specie di duplicato della domanda. Ma spiego tutto su come implementare punti di reparse, mountpoint, giunzioni e collegamenti simbolici, usando C/C++. Invece di dare semplicemente collegamenti a API, ciecamente ...

Problemi correlati