我有一个程序可以读取一组文件,关闭它们,然后尝试删除它们。
有时(并不总是,但经常)删除失败并显示“共享违规”错误。
使用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;
}
答案 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中看到关闭操作,操作系统将在释放所有句柄后关闭文件。