R
Richard Hsu
// code
#include "stdio.h"
int status(FILE * f) {
printf("ftell:%d, feof:%s\n", ftell(f), feof(f) != 0 ? "true" :
"false");
}
int case1() {
FILE * f = fopen("c:\\blah", "wb+");
int i = 5;
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f));
rewind(f);
fread(&i,sizeof(int),1,f);
status(f);
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f)); // fails
fread(&i,sizeof(int),1,f); // push it to eof
status(f);
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f)); // now successful
fclose(f);
}
int case2() {
FILE * f = fopen("c:\\blah", "wb+");
int i = 5;
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f));
rewind(f);
fseek(f,sizeof(int),0); // similar to fread but don't read just move
file pointer
status(f);
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f)); // this works
fclose(f);
}
int main() {
printf("running case1..\n");
case1();
printf("running case2..\n");
case2();
system("PAUSE");
}
//----------------------------------------------------------------------------------------
Hi All,
in case1,
when i do fread() and then fwrite, fwrite fails to write, it works only
when i do another fread() to push the file pointer to eof. can someone
help me understand this ?
in case2,
instead of using fread() if i use fseek() to advance the file pointer
ahead, fwrite() works without any problem.
i am using ftell() to tell me where the file pointer is at. in both
cases, the file pointer is at the same position however in case1 fwrite
fails while it works in case2,
so my question is
a) why fwrite fails ?
b) why it works when i use another redundant fread() to push it to eof
?
c) why it works in case2 with fseek even though ftell() shows the same
position ?
thank you in advance.
Richard Hsu
Toronto, Canada.
#include "stdio.h"
int status(FILE * f) {
printf("ftell:%d, feof:%s\n", ftell(f), feof(f) != 0 ? "true" :
"false");
}
int case1() {
FILE * f = fopen("c:\\blah", "wb+");
int i = 5;
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f));
rewind(f);
fread(&i,sizeof(int),1,f);
status(f);
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f)); // fails
fread(&i,sizeof(int),1,f); // push it to eof
status(f);
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f)); // now successful
fclose(f);
}
int case2() {
FILE * f = fopen("c:\\blah", "wb+");
int i = 5;
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f));
rewind(f);
fseek(f,sizeof(int),0); // similar to fread but don't read just move
file pointer
status(f);
printf("fwrite:%d\n", fwrite(&i,sizeof(int),1,f)); // this works
fclose(f);
}
int main() {
printf("running case1..\n");
case1();
printf("running case2..\n");
case2();
system("PAUSE");
}
//----------------------------------------------------------------------------------------
Hi All,
in case1,
when i do fread() and then fwrite, fwrite fails to write, it works only
when i do another fread() to push the file pointer to eof. can someone
help me understand this ?
in case2,
instead of using fread() if i use fseek() to advance the file pointer
ahead, fwrite() works without any problem.
i am using ftell() to tell me where the file pointer is at. in both
cases, the file pointer is at the same position however in case1 fwrite
fails while it works in case2,
so my question is
a) why fwrite fails ?
b) why it works when i use another redundant fread() to push it to eof
?
c) why it works in case2 with fseek even though ftell() shows the same
position ?
thank you in advance.
Richard Hsu
Toronto, Canada.