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 回答