C ++:由于文件夹名称上的空格,无法移动文件

时间:2017-09-15 17:01:38

标签: c++ winapi

我使用movefile()将文件移动到特定文件夹, 但是当我尝试这样做时,它不起作用,因为文件夹的名称中有空格“New Folder” 但如果文件夹的名称没有空格,则可以使用

以下是示例(没有名称中包含空格的文件夹):

std::string input1 = "C:\\Users\\Username\\link.txt";
std::string input2 = "C:\\Users\\Username\\Desktop\\NewFolder\\link.txt";
MoveFile(input1.c_str(), input2.c_str());

有一个包含空格

的文件夹的例子
std::string input1 = "C:\\Users\\Username\\link.txt";
std::string input2 = "C:\\Users\\Username\\Desktop\\New Folder\\link.txt"; //here's the folder
MoveFile(input1.c_str(), input2.c_str());

我没有收到任何语法错误,但我很确定,因为“新”“文件夹”之间存在空间,所以无效

有什么方法可以解决吗?

1 个答案:

答案 0 :(得分:6)

我无法重现失败。

我的项目配置为ANSI / MBCS而不是Unicode(从而允许std::string::c_str()可以通过基于TCHAR的{​​{1}}宏),显示的确切代码(仅替换MoveFile()和我自己一起工作对我来说非常好。 Username返回TRUE,文件实际上已移动。

MoveFile()

所以,问题必须在其他地方。之一:

  • 源文件不存在或无法访问。
  • 目标文件夹不存在(std::string input1 = "C:\\Users\\<my username>\\link.txt"; std::string input2 = "C:\\Users\\<my username>\\Desktop\\New Folder\\link.txt"; MoveFile(input1.c_str(), input2.c_str()); // <-- SUCCEEDS 不会为您创建它!事先使用MoveFile()或类似功能),或者无法访问。
  • 移动数据时出错。这在NTFS文件系统中很少见,因为将文件从一个文件夹移动到同一驱动器上的另一个文件夹只会重新定位文件引用而不会移动实际的文件数据。

如果CreateDirectory()返回FALSE,则需要致电MoveFile()以找出失败的原因。