【发布时间】:2011-12-28 06:50:24
【问题描述】:
我有一个程序读取一组文件,关闭它们,然后尝试删除它们。
有时(不总是,但经常)删除失败并出现“共享冲突”错误。
使用 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;
}
【问题讨论】:
-
重现问题的最小测试用例会很好。
-
相关代码非常分散,所以复制所有相关代码是有问题的。此外,相同的代码在其他应用程序中也没有任何问题。
-
如果代码是分散的,那么请尝试创建一个最小的代码示例来重现问题,当您这样做时,问题很可能会暴露给您。没有代码,答案将仅仅是猜测和没有别的。
-
您是否使用 pointer 进行流式传输?或者,也许,您正在使用指向具有 fstream 的类的指针?
-
如果代码过于分散而无法复制,则可能是过于分散而无法修复。控制它,简化它,或者学会忍受崩溃。
标签: c++ visual-studio-2010 iostream