Using fstream to open a file that is created only during runtime

Hi,

I'm using Visual C++ 6.0 and I'm trying to use fstream to open and read a file that is created only during runtime. This file is written by another function running on another thread, and my program will keep trying to "open" the file until it can be opened, i.e. after it's created, then read 3 numbers from it and execute the rest of its code.

The file test.txt has the content

1
2
3
1
3
4


My program that polls and opens the file is as follows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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(donefile.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 = %d num3 = %d\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");


I executed the program by

test_prog.exe "C:\test.txt"

and waited about 3 seconds before putting the test.txt file into C:\

My output was

1
2
3
4
5
6
7
8
9
10
11
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


The test.txt file disappears after I refresh the C:\ folder.

So the values for snum1, num2 and num3 are all wrong, as if the file was not read correctly.

If I put a while fin.good() loop after printf("fin is open\n"); for that entire block (until printing the values of num2 and num3), then I get

1
2
3
4
5
6
7
8
9
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


How can I correctly read a file that is only created during runtime?

Thank you.
Last edited on
This line looks suspicious:
1
2
3
4
5
6
7
8
tfile.assign(argv[1]);
printf("Begin prog %s\n", tfile.c_str());
    
fp: fin.open(donefile.c_str(), ifstream::in); //where did donefile come from
if (fin.is_open())
{
   printf("fin is open\n");
  
Thanks for spotting the mistake. I've changed donefile to tfile, and still have the same problem.

I've also added a

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


check right after the

printf("fin is open\n");

line, and the failbit was set when the file is put into the folder during runtime.

Everything runs correctly when the file is in place before execution.

ETA:
I finally found the problem.

The failbit was set after the first fin.open failed, and was never reset when the fin.open succeeded. Once I did a fin.clear() after Line 24 of my original post, the program ran successfully.
Last edited on
dgt
Topic archived. No new replies allowed.