fstream :: close()不关闭文件

时间:2011-12-28 06:50:25

标签: c++ visual-studio-2010 iostream

我有一个程序可以读取一组文件,关闭它们,然后尝试删除它们。

有时(并不总是,但经常)删除失败并显示“共享违规”错误。

使用sysinternals进程监视器我看到在这些情况下,关闭操作没有反映在进程监视器中。

有时似乎没有明显的原因跳过关闭系统调用,没有任何例外。

这是在使用visual studio 2010的Windows 7 64位机器上发生的。

代码示例;

void readFile(string file)
{
  ifstream stream(file);
  string line;
  while(getline(stream, line))
  {
    cout << line << endl:
  }
  stream.close(); // this is redundant
}

//调用代码:

readFile(file);
if(remove(file.c_str()) != 0)
{
  cout << "file deletion failed" << endl;
}

2 个答案:

答案 0 :(得分:0)

您的代码缺少;。将此cout << line << endl:更改为此cout << line << endl;

这是一个类似的问题:Any reason why an std::ofstream object won't close properly?

答案 1 :(得分:0)

如果您使用带有bInheritHandles = true的CreateProcess在中间创建进程,则可能会发生这种情况。新进程将继承文件句柄,并且文件不会被主进程关闭,因为仍有一个未完成的句柄。这可以解释为什么您无法在Process Monitor中看到关闭操作,操作系统将在释放所有句柄后关闭文件。