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

时间:2011-06-08 06:17:08

标签: c# winapi filenames

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

2 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:0)

您可以在空格

后使用非法字符访问该文件
C:\123.txt :illegal

以及之后的所有内容都将被移除,但空间仍然存在。您也可以通过这种方式创建以空格结尾的文件。