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

を使用する理由と使用MoveFileCopyFileない理由MoveFileExMoveFileMicrosoftのMSDNドキュメントによると、それを使用するとセキュリティの説明がコピーされず、新しい場所でデフォルトになっているものが失われることが逐語的に述べられています。

しかし、0 を返すことは失敗を意味するため、GetLastErrorAPI を呼び出して結果の数値を適切なエラー文字列に検索することで、より意味のあるエラーを拡張できます。このように暗闇でランダムに撮影する以外に。また、このプロジェクトはデフォルトの文字セットに Unicode/Ansi または Not-Set を使用していますか?

また、リグレッション テストを行わずに問題全体を投稿して、問題を評価し、何が悪かったのかを伝えることは、あまり役に立ちません。あなたは、誰かに問題を迅速に解決してもらいたいという方針に従っていますが、これはあなたにとっても他の人にとっても学習の場です。

于 2015-08-30T09:55:03.043 に答える