2009-09-09 12 views
14

Sto provando a creare una giunzione NTFS. Dalla riga cmd posso farlo usando lo junction.exe tool from sysinternals. L'uscita di un cmd DIR per un bivio simile a questa:In .NET, come si crea una giunzione in NTFS, al contrario di un collegamento simbolico?

Volume in drive C has no label. 
Volume Serial Number is C8BC-2EBD 

Directory of c:\users\cheeso\Documents 

03/22/2009 09:45 PM <JUNCTION>  My Music [\??\c:\users\cheeso\Music] 
05/11/2007 05:42 PM <DIR>   My Received Files 
03/22/2009 09:46 PM <JUNCTION>  my videos [\??\c:\users\cheeso\Videos] 

ho letto da qualche parte che giunzioni sono un sottoinsieme dei collegamenti simbolici.

Così ho provato a utilizzare CreateSymbolicLink per creare una giunzione. Quando lo faccio, ottengo effettivamente un collegamento simbolico, non un incrocio.

09/09/2009 11:50 AM <SYMLINKD>  newLink [.\] 

C'è anche CreateHardLink. Il doc lì dice giunzioni (aka "Reparse Points") sono un sottoinsieme di hardlinks. ma non riesco a far funzionare questa chiamata. Completa ma non è stato creato alcun collegamento o giunzione.

sto usando .NET/C# e le importazioni simile a questa:

[Interop.DllImport("kernel32.dll", EntryPoint="CreateSymbolicLinkW", CharSet=Interop.CharSet.Unicode)] 
    public static extern int CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, int dwFlags); 

    [Interop.DllImport("kernel32.dll", EntryPoint="CreateHardLinkW", CharSet=Interop.CharSet.Unicode)] 
    public static extern bool CreateHardLink(string lpFileName, 
              string lpExistingFileName, 
              IntPtr mustBeNull); 

Che cosa sto facendo di sbagliato?
Come posso creare una giunzione da C#?

risposta

11

Sembra che sia possibile, e qualcuno ha creato una libreria su CodeProject che ha un numero di funzioni che hanno costruito in C# per lavorare con i punti di Junction.

http://www.codeproject.com/KB/files/JunctionPointsNet.aspx

Sembra che egli in realtà usando la seguente DllImport per realizzarlo:

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    private static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode, 
     IntPtr InBuffer, int nInBufferSize, 
     IntPtr OutBuffer, int nOutBufferSize, 
     out int pBytesReturned, IntPtr lpOverlapped); 
+0

perfetto, grazie! Ho guardato e ho trovato alcuni link ma non quello, e niente che fosse veramente utilizzabile. – Cheeso

+1

Ti dispiace anche passare un esempio di utilizzo, dal momento che il link che hai postato è (al momento) valido, ma potrebbe diventare morto in futuro, + uno deve registrarsi su quella pagina per scaricare i sorgenti e vedere il codice come bene? Sarebbe davvero la risposta completa qui allora. Grazie! :) –

Problemi correlati