无法在文件名末尾复制/移动带空格的文件

真的很疯狂! 我使用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

您的文件名中有一个字符在Win32中是非法的。 要绕过Win32路径解析器,您只需在文件名前加上\\?\ 。 例如:

 MoveFile(@"\\?\C:\123.txt ", "C:\\456.txt"); 

此技术还允许您拥有长度最大为32k的路径(在Win32中只包含260个驱动器号)。

您可以在空格后使用非法字符访问该文件

 C:\123.txt :illegal 

:以及之后的所有内容都将被删除,但空间将保留。 您也可以通过这种方式创建以空格结尾的文件。