当我使用一些System.IO
方法,并且“意外地”在路径变量中添加额外的斜杠(\
)时,似乎没有什么特别的事情发生。没有错误或警告,代码就好像只有适量的斜杠一样。
示例:
Directory.CreateDirectory(@"C:\Users\Public\Documents\\test");
File.Copy(@"C:\Users\Public\\Documents\test.txt", @"C:\Users\\Public\Documents\test\test.txt", true);
所以我想知道,如果上面的代码有时会有额外的斜杠,或者在任何情况下都不重要吗?
答案 0 :(得分:1)
Windows似乎并不介意,但为什么不制作优雅的代码呢?
答案 1 :(得分:1)
我非常确定Windows在使用它之前“规范化”了路径结构。但是,为了安全起见,最好使用以下方法组合路径:
Path.Combine(string1, string2);
而不是连接两个字符串。
答案 2 :(得分:1)
Windows对此非常有弹性,还没有发现问题。
在这个帖子中查看the snippet。请注意_ACP_INCLUDE环境变量的值。你必须向右滚动才能看到:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include;
Afaik,很多拥有VS2008的机器都有这条糟糕的道路,我的确如此。然而,当你解析路径字符串时,它当然可以绊倒你自己的代码。
答案 3 :(得分:0)
你应该知道的情况,
CreateFileW(L"D:\\1\\test.txt", GENERIC_READ, 0, 0, CREATE_NEW, 0, 0);
// A file has been created.
CreateFileW(L"D:\\1\\test.txt", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
// Of course, the file will be opened well.
CreateFileW(L"D:\\1\\\\test.txt", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
// It works well too. Windows subsystem does canonicalize that.
CreateFileW(L"\\\\?\\D:\\1\\\\test.txt", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
// '\\?\' prefix tell Windows "Don't touch my path, just send it to filesystem"
// So it will be failed.
http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx#maxpath
我不知道.NET如何包装这个api。我猜Hans Passant可能对此很了解。 :)