真的很疯狂!我使用Far 2.0(http://www.farmanager.com/创建了一个文件,也许你可以使用其他文件管理器);它的文件名是'C:\ 123.txt'(是的,文件路径末尾有空格)。
我正在尝试使用C#程序复制或移动此文件:
File.Copy("C:\\123.txt ", "C:\\456.txt", true);
但它失败了“找不到文件'C:\ 123.txt'。”例外。但该文件存在!
我正在尝试使用Windows API:
[DllImport("kernel32.dll")]
public static extern int MoveFile(string lpExistingFileName, string lpNewFileName);
MoveFile("C:\\123.txt ", "C:\\456.txt",);
但它也失败了。
我正在尝试使用xcopy工具:
C:\>xcopy "C:\123.txt " "C:\456.txt" /Y
File not found - 123.txt
0 File(s) copied
如何以编程方式重命名文件?为什么会这样?
我的操作系统:Windows 7 x64
答案 0 :(得分:11)
您的文件名中有一个字符在Win32中是非法的。要绕过Win32路径解析器,您只需在文件名前添加\\?\
。例如:
MoveFile(@"\\?\C:\123.txt ", "C:\\456.txt");
此技术还允许您拥有最长32k的路径(在Win32中只包含260个驱动器号)。
答案 1 :(得分:0)
您可以在空格
后使用非法字符访问该文件C:\123.txt :illegal
以及之后的所有内容都将被移除,但空间仍然存在。您也可以通过这种方式创建以空格结尾的文件。