2

ファイル名の変更で困っています。既存のファイルの数行を削除して、新しいファイルに置き換えようとしています。

string line;   
ifstream myfile(filename);  
ofstream outfile;  
outfile.open(filename.append(".new"));  

if(myfile.is_open()) {
    //loop here that runs through code and calles
    //outfile << line; repeatedly
}

int test = rename(filename.append(".new").c_str(),filename.c_str());
if (test == 0) cout << "Success";
else cout << "Failure";

私がオンラインで見たものから、これにより新しいドキュメントが作成され、入力され、元のドキュメントが更新されたドキュメントに置き換えられることが期待されます。

誰かが私が間違っているところを見ていますか?

4

1 に答える 1

4

まだ両方のファイルが開いているため、失敗しているようです。ファイルがロックされている間は、ファイルの名前を変更できない可能性があります。名前を変更する前に、ファイルを閉じてください。

また、名前を変更する前に元のファイルを削除する必要があります。

疑似コードでは、これはあなたがする必要があることです:

  • 元のファイルを開きます。
  • 一時的な .new ファイルを開きます。
  • どんなタスクでも実行します。
  • 両方のファイルを閉じます。
  • 元のファイルを削除します。
  • 名前を変更します。

errnoへの呼び出しがrename失敗すると、C++ 実装が設定される可能性があります。errnoしたがって、呼び出しが失敗した理由を調べるには、の値を確認する必要があります。問題を自分で診断できるように、エラー報告メカニズムについてよく理解してください。

于 2013-10-15T19:23:38.107 に答える