MoveFile()不起作用

时间:2015-08-30 07:47:05

标签: c++ winapi winapp

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

1 个答案:

答案 0 :(得分:0)

使用MoveFile而非CopyFile并且未使用MoveFileEx的任何原因。根据微软的MSDN文档,它明确指出,当你使用MoveFile时,它不会复制安全描述,你会丢失到新位置的默认值,这是侧面说明。

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

另外,发布整个问题而不给我们回归测试,所以我们可以评估它并告诉你出了什么问题并不是很有帮助。您正在追踪一条线,您希望有人快速解决您的问题并将其解决,同时这也是您和其他人的学习场所。