在.NET中,如何在NTFS中创建连接,而不是Symlink?

Che*_*eso 15 .net pinvoke winapi ntfs deviceiocontrol

我正在尝试创建一个NTFS Junction.从cmd行我可以使用sysinternals中junction.exe工具执行此操作.结点的DIR cmd输出如下所示:

 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]
Run Code Online (Sandbox Code Playgroud)

我在某地读过Junctions是Symbolic Links的子集.

所以我尝试使用CreateSymbolicLink创建一个Junction.当我这样做时,我实际上得到了一个符号链接,而不是一个连接点.

09/09/2009  11:50 AM    <SYMLINKD>     newLink [.\]
Run Code Online (Sandbox Code Playgroud)

还有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);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?
如何在C#中创建一个Junction?

Sql*_*yan 13

看起来你可以,有人在CodeProject上创建了一个库,它有许多用C#构建的函数来处理Junction点.

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);
Run Code Online (Sandbox Code Playgroud)

  • 您还介意传递一个用法示例吗,因为您发布的链接(目前)有效,但是将来可能会失效,+您需要在该页面上注册以下载源代码并查看代码?届时,这将是真正的完整答案。谢谢!:) (2认同)