2014-02-06 49 views
0

我正在尝试完成这个奇怪的事情,它在文件中查找特定样式的序列,检查它是否是它正在查找的序列;然后,在确认后,它会回溯并将某些值更改为期望值。这是什么MSDN警告fopen(或fopen_s)试图说?

它已经做了所有这些......我的问题是与此以下警告:

当指定"r+""w+",或"a+"访问类型,阅读和写作都被允许(该文件说开放“更新”)。但是,从阅读切换到书写时,输入操作必须遇到EOF标记。如果没有EOF,则必须使用对文件定位功能的中间调用。文件定位功能是fsetpos,fseekrewind。当您从写入切换到读取时,您必须使用中间呼叫fflush或文件定位功能。

到底这是什么警告想说什么?顺便说一句,我正在打电话给一个文件定位功能,正当我从阅读切换到写作时,使用fsetpos来寻找我存储的位置。

如果我没有?

写入/读取是否从最后一个位置指示符的位置继续?

随着代码实例:

... 
getc(somefilepointer); 
fprintf_s(somefilepointer, "%X", 28); 
... 

... 
getc(somefilepointer); 
fgetpos(somefilepointer, &an_fpos_t); 
fsetpos(somefilepointer, &an_fpos_t); 
fprintf_s(somefilepointer, "%X", 28); 
... 

不是这些两个相同的?

回答

0

我同意警告不完全清楚。但是,您需要小心,因为它可能不会达到您的预期。从http://www.cplusplus.com/reference/cstdio/fopen/

“添加/更新:打开文件进行更新(包括输入和输出)与所有输出操作在文件结束写入数据定位操作(FSEEK,fsetpos,倒带)影响下一个输入操作,,但输出操作将位置移回到文件末尾如果文件不存在,则创建文件。“

因此,如果文件已打开A +,您很好打印到文件的末尾。