C++ MoveFile()不';行不通

C++ MoveFile()不';行不通,c++,winapi,winapp,C++,Winapi,Winapp,我正在尝试将一些文件从一个目录移动到同一驱动器上的另一个目录。所有目标目录都存在,但MoveFile()不起作用,并且GetLastError()返回0。 我是C++新手,我不知道是什么引起了这个问题。 代码如下: try { destinationFilePath = i->FilePath; destinationFilePath=destinationFilePath.substr(destinationFilePath.find(GENERAL_SAVE_PATH) + s

我正在尝试将一些文件从一个目录移动到同一驱动器上的另一个目录。所有目标目录都存在,但
MoveFile()
不起作用,并且
GetLastError()
返回0。 我是C++新手,我不知道是什么引起了这个问题。 代码如下:

try
{
  destinationFilePath = i->FilePath;
  destinationFilePath=destinationFilePath.substr(destinationFilePath.find(GENERAL_SAVE_PATH) + strlen(GENERAL_SAVE_PATH.c_str()));
  destinationFilePath = Backup_Save_Path + destinationFilePath;

  vector<string> folders;
  StringSplit(destinationFilePath,"\\",folders);
  string pathToCreate;
  string backSlash = "\\";
  for(vector<string>::const_iterator j = folders.begin(); j != folders.end(); ++j)
  {
      pathToCreate += j->c_str() + backSlash;
      if (pathToCreate.find(".txt") == std::string::npos)
         CreateBackupFolders(pathToCreate);
  }

  if (MoveFile(lastExportedFilePath.c_str(),destinationFilePath.c_str()))
     AfxMessageBox("moved");
  else
  {
     DWORD dw = GetLastError();
     AfxMessageBox("Couldn't move");
  }

  lastExportedFilePath = i->FilePath;
}
catch(...)
{
  Log(LOG_PATH_LOG_INSERTING, LOG_TYPE_EXCEPTION, "ExportLogsToDB()", "Move", destinationFilePath, "");
}
试试看
{
destinationFilePath=i->FilePath;
destinationFilePath=destinationFilePath.substr(destinationFilePath.find(GENERAL_SAVE_PATH)+strlen(GENERAL_SAVE_PATH.c_str());
destinationFilePath=备份\保存\路径+destinationFilePath;
矢量文件夹;
StringSplit(目标路径“\\”,文件夹);
字符串路径创建;
字符串反斜杠=“\\”;
对于(vector::const_迭代器j=folders.begin();j!=folders.end();++j)
{
pathToCreate+=j->c_str()+反斜杠;
if(pathToCreate.find(“.txt”)==std::string::npos)
创建备份文件夹(路径创建);
}
if(MoveFile(lastExportedFilePath.c_str(),destinationFilePath.c_str())
AfxMessageBox(“移动”);
其他的
{
DWORD dw=GetLastError();
AfxMessageBox(“无法移动”);
}
lastExportedFilePath=i->FilePath;
}
捕获(…)
{
日志(日志路径、日志插入、日志类型、异常、“ExportLogsToDB()”、“Move”、destinationFilePath“);
}

CopyFile
上使用
MoveFile
以及不使用
MoveFileEx
的任何原因。根据微软的MSDN文档,它一字不差地指出,当您使用
MoveFile
时,它不会复制安全说明,您将失去在新位置的默认设置,这是旁注

但是由于它返回0意味着失败,我们可以通过调用
GetLastError
API并将结果数字查找到相应的错误字符串来扩展该错误,因此它更有意义。而不是像这样在黑暗中随意射击。此外,此项目是否使用Unicode/Ansi作为默认字符集


此外,在不给我们回归测试的情况下发布整个问题,这样我们就可以对其进行评估,并告诉您出了什么问题,这并没有多大帮助。您正在遵循一条路线,希望有人能快速解决您的问题,同时这也是您和其他人学习的地方。

关于使用
MoveFile
over
CopyFile
以及不使用
MoveFileEx
的原因。根据微软的MSDN文档,它一字不差地指出,当您使用
MoveFile
时,它不会复制安全说明,您将失去在新位置的默认设置,这是旁注

但是由于它返回0意味着失败,我们可以通过调用
GetLastError
API并将结果数字查找到相应的错误字符串来扩展该错误,因此它更有意义。而不是像这样在黑暗中随意射击。此外,此项目是否使用Unicode/Ansi作为默认字符集


此外,在不给我们回归测试的情况下发布整个问题,这样我们就可以对其进行评估,并告诉您出了什么问题,这并没有多大帮助。您希望有人快速解决您的问题并将其解决,而这对您和其他人来说都是一个学习的地方。

您可以尝试创建一个并向我们展示吗?您是否已使用调试器查看最终结果字符串是否正确?是,源路径和目标路径都正确如果源路径和目标路径正确,您能否将示例简化为包含源路径和目标路径的字符串文本?例如,
if(MoveFile(“c:\\source.txt”,“c:\\dest.txt”)
@SalehRezaei很可能是您需要一个宽字符串来指定路径。您可以尝试创建一个并向我们显示吗?您是否已使用调试器查看最终结果字符串是否正确?是,源路径和目标路径都正确如果源路径和目标路径正确,您能否将示例简化为包含源路径和目标路径的字符串文本?例如,
if(MoveFile(“c:\\source.txt”,“c:\\dest.txt”)
@SalehRezaei很可能需要一个宽字符串来指定路径。谢谢你的回答,但我不想快速得到答案并解决问题,如果是这样的话,我会在两天前发布这个问题。正如我所说的,我对C++是新的,我已经做了我能想象的解决问题的方法,但是我不能这么做。我真的很想知道是什么导致了这个问题,在上一段之前,我建议您使用
GetLastError
将错误基础扩展到更有意义的内容,但您没有提供这个信息。相反,当人们真的试图帮助你的时候,你却一直在抱怨和献身。您应该使用回归测试用例和简化的用例,这样我们也可以尝试它,并赞扬我们的经验和您的经验。但是,你正在这样做。所以,请成为解决方案的一部分,不要只是发牢骚,让别人来帮助你@哈尔斯滕,他不能“奉献”你,因为他没有足够的分数。我想你需要100分才能否决投票结果。@BarmakShemirani好的,有道理。我还是新来的,所以我正在慢慢地学习所有的规则。:)谢谢你的回答,但我不想只是快速得到答案并解决问题,如果是这样的话,我会在两天前发布这个问题。正如我所说的,我对C++是新的,我已经做了我能想象的解决问题的方法,但是我不能这么做。我真的很想知道是什么导致了这个问题,在上一段之前,我建议您使用
GetLastError
将错误基础扩展到更有意义的内容,但您没有提供这个信息。相反,当人们真的试图帮助你的时候,你却一直在抱怨和献身。您应该使用回归测试用例和简化的用例,以便我们也可以在