我正在使用 Visual C++ 6.0,我正在尝试使用 fstream 打开和读取仅在运行时创建的文件。这个文件是由另一个线程上运行的另一个函数编写的,我的程序将继续尝试“打开”文件,直到它可以打开,即在它被创建之后,然后从中读取 3 个数字并执行它的其余代码。
该文件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"
test.txt
并在将文件放入之前等待了大约 3 秒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
在运行时将文件放入文件夹时设置。
当文件在执行前就位时,一切都运行正常。