2009-09-09 7 views
14

Próbuję utworzyć węzeł NTFS. Z linii cmd mogę to zrobić za pomocą junction.exe tool from sysinternals. Wyjście cmd DIR na skrzyżowaniu wygląda następująco:W .NET, jak utworzyć łącze w NTFS, w przeciwieństwie do 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] 

Czytałem gdzieś, że Skrzyżowania są podzbiorem dowiązania symboliczne.

Próbowałem więc użyć CreateSymbolicLink, aby utworzyć skrzyżowanie. Kiedy to zrobię, dostaję Symlink, a nie skrzyżowanie. Jest to także . Doktor mówi, że skrzyżowania (inaczej "Punkty reparacji") stanowią podzbiór twardych linków. ale nie mogę sprawić, by to wezwanie zadziałało. Kończy się, ale nie utworzono twardego łącza ani połączenia.

Używam .NET/C# i przywóz wyglądać następująco:

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

Co robię źle?
Jak utworzyć skrzyżowanie z poziomu C#?

Odpowiedz

11

Wygląda na to, że możesz i ktoś stworzył bibliotekę na CodeProject, która ma wiele funkcji, które zbudowali w C# do pracy z punktami skrzyżowania.

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

Wygląda na to, że w rzeczywistości za pomocą następującego DllImport do osiągnięcia go:

[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

doskonały, dzięki! Spojrzałem i znalazłem kilka linków, ale nie ten, i nic, co było naprawdę użyteczne. – Cheeso

+1

Czy możesz przekazać przykład użycia, ponieważ opublikowany link jest (w tej chwili) ważny, ale może się w przyszłości umrzeć, + trzeba zarejestrować się na tej stronie, aby pobrać źródła i zobaczyć kod jako dobrze? Byłaby to naprawdę pełna odpowiedź tutaj. Dzięki! :) –

Powiązane problemy