我在重命名文件時遇到問題。我試圖刪除現有文件的幾行,並將其替換爲新文件。爲什麼我的重命名文件不工作?
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";
從我在網上看到的,我希望它可以創建新文檔,填充它,然後用更新替換原來的。
有沒有人看到我出錯的地方?
在嘗試重命名之前是否關閉了新文件? – usr2564301
請注意(即使在儘可能工作的情況下),如果存在硬鏈接,這可能會失敗 - 當您「刪除」現有文件時,只會從文件名中刪除一個鏈接到內容。鏈接到相同內容的其他名稱仍將鏈接到舊文件,而不是新文件。 –
你在Windows上運行嗎?如果是這樣,在執行重命名之前,您需要確保關閉任何打開的舊文件句柄,否則將失敗,並顯示'ERROR_SHARING_VIOLATION'。或者,也可以使用兼容的共享模式打開文件,但這需要放棄C++'iostream' API來支持諸如['_fsopen()']之類的函數(http://msdn.microsoft.com/en-us/library/ 8f30b0db.aspx)或原始系統調用['CreateFile()'](http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx)。 –