为什么我的重命名文件不起作用?

时间:2013-10-15 19:21:56

标签: c++ io file-rename

我在重命名文件时遇到问题。我正在尝试删除现有文件的几行,并将其替换为新文件。

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";

从我在网上看到的情况来看,我希望这可以创建新文档,填充它,然后用更新的文档替换原文。

有谁看到我哪里出错?

1 个答案:

答案 0 :(得分:4)

看起来它失败了,因为你仍然打开了这两个文件。您很可能无法在锁定文件时重命名该文件。在尝试重命名之前关闭该文件。

此外,您需要先删除原始文件,然后才能重命名。

在伪代码中,您需要这样做:

  • 打开原始文件。
  • 打开临时.new文件。
  • 执行您执行的任何任务。
  • 关闭这两个文件。
  • 删除原始文件。
  • 重命名。

errno的调用失败时,您的C ++实现可能会设置rename。因此,您应该检查errno的值,以找出呼叫失败的原因。请熟悉错误报告机制,以便您自己诊断问题。