2009-09-09 3 views
14

Я пытаюсь создать соединение NTFS. Из линии cmd я могу сделать это, используя junction.exe tool from sysinternals. Выход ЦМД DIR для перехода выглядит следующим образом:В .NET, как мне создать соединение в NTFS, а не в 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] 

Я где-то читал, что спаи подмножество символических ссылок.

Поэтому я попытался использовать CreateSymbolicLink, чтобы создать соединение. Когда я это делаю, я получаю Symlink, а не соединение.

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

Существует также CreateHardLink. Док там говорит, что переходы (ака «точки повторной обработки») являются подмножеством жестких ссылок. но я не могу заставить этот звонок работать. Он завершается, но нет жесткой ссылки или соединения.

Я использую .NET/C# и импорта выглядеть следующим образом:

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

Что я делаю неправильно?
Как создать соединение из C#?

ответ

11

Похоже, вы можете, и кто-то создал библиотеку в CodeProject, которая имеет ряд функций, которые они создали на C# для работы с точками соединения.

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

Похоже, что он на самом деле с помощью следующей DllImport для ее выполнения:

[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

совершенное, спасибо! Я посмотрел и нашел несколько ссылок, но не тот, и ничего, что было действительно полезным. – Cheeso

+1

Не пропустите пример использования, так как ссылка, которую вы опубликовали (на данный момент) действительна, но может быть мертва в будущем, + нужно зарегистрироваться на этой странице, чтобы загрузить источники и увидеть код как Что ж? Был бы действительно полный ответ здесь. Благодаря! :) –