2009-09-09 8 views
14

Ich versuche, eine NTFS-Junction zu erstellen. Von der cmd-Zeile kann ich dies mit der junction.exe tool from sysinternals tun. Der Ausgang eines DIR cmd für eine Kreuzung sieht wie folgt aus:In .NET, wie erstelle ich eine Junction in NTFS, im Gegensatz zu einem Symlink?

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] 

Ich habe irgendwo gelesen, dass Junctions eine Teilmenge von symbolischen Links sind.

Also habe ich versucht CreateSymbolicLink zu verwenden, um eine Junction zu erstellen. Wenn ich das tue, bekomme ich tatsächlich einen Symlink, keine Kreuzung.

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

Es gibt auch CreateHardLink. Das Dokument dort sagt, Kreuzungen (auch bekannt als "Reparse Points") sind eine Untermenge von Hardlinks. aber ich kann diesen Anruf nicht zur Arbeit bringen. Es wird abgeschlossen, aber es wird kein Hardlink oder keine Junction erstellt.

Ich bin mit .NET/C# und die Einfuhren wie folgt aussehen:

[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); 

Was mache ich falsch?
Wie kann ich eine Junction innerhalb von C# erstellen?

Antwort

11

Es sieht so aus als könnten Sie, und jemand hat eine Bibliothek in CodeProject erstellt, die eine Reihe von Funktionen hat, die sie in C# eingebaut haben, um mit Verbindungspunkten zu arbeiten.

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

Es sieht aus wie er die folgende DllImport tatsächlich ist mit ihm zu erreichen:

[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

perfekt, danke! Ich schaute und fand ein paar Links, aber nicht dieses und nichts, was wirklich brauchbar war. – Cheeso

+1

Würde es Ihnen auch gefallen, ein Beispiel für die Verwendung zu übergeben, da der Link, den Sie gepostet haben, im Moment gültig ist, aber in Zukunft möglicherweise tot wird, + muss man sich auf dieser Seite registrieren, um die Quellen herunterzuladen und den Code zu sehen Gut? Wäre dann wirklich die komplette Antwort hier. Vielen Dank! :) –

Verwandte Themen