使用fstream打开仅在运行时创建的文件

时间:2012-11-20 10:21:13

标签: visual-c++ file-io fstream stdstring

我正在使用Visual C ++ 6.0,我正在尝试使用fstream打开并读取仅在运行时创建的文件。该文件由另一个在另一个线程上运行的函数编写,我的程序将继续尝试“打开”该文件,直到它被打开,即在它被创建之后,然后从中读取3个数字并执行其余的代码。 / p>

文件test.txt包含内容

1
3
4

我的程序轮询和打开文件如下:

ifstream fin;
std::string tfile, snum1, snum2, snum3;
long int num2, num3;

tfile.assign(argv[1]);
printf("Begin prog %s\n", tfile.c_str());

fp: fin.open(tfile.c_str(), ifstream::in);
if (fin.is_open())
{
   printf("fin is open\n");
   getline(fin, snum1);
   getline(fin, snum2);
   getline(fin, snum3);
   num2 = atol(snum2.c_str());
   num3 = atol(snum3.c_str());
   printf("snum1 = %s\n", snum1.c_str());
   printf("num2 = %ld num3 = %ld\n", num2, num3);
   fin.close();
}
else
{
   printf("Cannot open file %s\n", tfile.c_str());
   fin.close();
   Sleep(500);
   goto fp;
}

remove(tfile.c_str());
printf("End of prog\n");

我通过

执行了该程序
test_prog.exe "C:\test.txt"

并等待约3秒钟,然后将test.txt文件放入C:\

我的输出是

Begin prog C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
fin is open
snum1 = 
num2 = 0 num3 = 0
End of prog

刷新test.txt文件夹后C:\文件消失。

因此snum1,num2和num3的值都是错误的,就像文件没有被正确读取一样。

如果我在while fin.good()之后为整个块放置一个printf("fin is open\n");循环(直到打印num2和num3的值),那么我得到

Begin prog C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
Cannot open file C:\test.txt
fin is open
End of prog

如何正确读取仅在运行时创建的文件?

ETA: 我还添加了一个

if (fin.rdstate() & ifstream::failbit) != 0)
   printf("failbit set\n");

printf("fin is open\n");行之后立即检查,并且在运行时将文件放入文件夹时设置了failbit

在执行文件之前,一切都正常运行。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题。

failbit在第一个fin.open失败后设置,并且在fin.open成功时从未重置。在fin.clear()循环中fin.close()else进行{{1}}后,程序成功运行。