1

我正在尝试将一些文件从一个目录移动到同一驱动器上的另一个目录中。所有目标目录都存在但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, "");
}
4

1 回答 1

0

MoveFile使用过度CopyFile和不使用的任何原因MoveFileEx。根据微软的 MSDN 文档,它逐字声明,当你使用MoveFile它时,它不会复制安全描述,你将失去在新位置的默认值,这是在旁注中。

但是由于它返回 0 意味着它失败了,我们可以通过调用GetLastErrorAPI 并将结果数字查找到适当的错误字符串来扩展该错误,这样它就更有意义了。除了像这样在黑暗中随意拍摄。另外,这个项目是使用 Unicode/Ansi 还是 Not-Set 作为默认字符集?

此外,在没有给我们回归测试的情况下发布整个问题以便我们可以评估它并告诉您出了什么问题,这也不是很有帮助。您正在遵循您希望有人快速解决您的问题并解决问题的路线,而这对您和其他人来说都是一个学习的地方。

于 2015-08-30T09:55:03.043 回答