UNC path does not work with .NET?

匆匆过客 提交于 2019-12-07 01:56:43

问题


I am running a very simple program, which is trying to list files in a folder on the same machine, which is specified using UNC format(as described in http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx):


static string rootDir = @"\\?\d:\share\input";

static void Main(string[] args)
{
    char[] invlidChars = Path.GetInvalidPathChars();
    foreach (char invChar in invlidChars)
    {
        if (rootDir.Contains(invChar.ToString()))
        {
            Console.WriteLine("InvChar - {0}", invChar);
        }
    }
    string[] matchFiles = Directory.GetFiles(rootDir);
}

However the Directory.GetFiles() does not work and throws an ArgumentException(which is thrown when - path is a zero-length string, contains only white space, or contains one or more invalid characters as defined by InvalidPathChars.). The Console.Writeline() does not print anything, which confirms that there are no invalid chars in the path. I get the same exception when I use "\\UNC\?\d:\share\input" or "\\UNC\?\machinename\share\input" or "\\?\machinename\share\input".

The "d:\share\input" is indeed a shared folder.

Does anybody know what could be wrong?

Thanks!


回答1:


The problem is that \\?\ is a windows API convention that is not supported by .NET. If you read carefully in your link \\?\ does not denote a UNC path, but is a special convention for windows API:

For file I/O, the "\\?\" prefix to a path string tells the Windows APIs to disable all string parsing and to send the string that follows it straight to the file system.

A .NET compatible UNC format would be \\machinename\d$\share\input. See this answer for more info.

The reason it is not supported by .NET is most likely that the extended path convention is not available on all platforms and therefore cannot be guaranteed to work by the framework.



来源:https://stackoverflow.com/questions/11009013/unc-path-does-not-work-with-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!