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

B.T*_*iri -1 c++ winapi

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

这是示例(没有包含名称空间的文件夹):

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());
Run Code Online (Sandbox Code Playgroud)

当有一个包含空格的文件夹时,就有了这个例子

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());
Run Code Online (Sandbox Code Playgroud)

我没有得到任何语法错误,但我很确定,它不起作用,因为"新""文件夹"之间的这个空间

有什么办法解决吗?

Rem*_*eau 6

我无法重现失败.

我的项目配置为ANSI/MBCS而不是Unicode(因此允许std::string::c_str()传递给TCHAR基于MoveFile()宏),显示的确切代码(仅替换Username我自己的代码)对我来说非常好. MoveFile()返回TRUE,实际移动文件.

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
Run Code Online (Sandbox Code Playgroud)

所以,问题必须在其他地方.或者:

  • 源文件不存在或无法访问.
  • 目标文件夹不存在(MoveFile()不会为您创建!CreateDirectory()事先使用或类似功能),或者无法访问.
  • 移动数据时出错.这在NTFS文件系统中很少见,因为将文件从一个文件夹移动到同一驱动器上的另一个文件夹只会重新定位文件引用而不移动实际的文件数据.

如果MoveFile()返回FALSE,则需要调用GetLastError()以找出失败的原因.