c的文件操作问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 08:56:32
就是以ab+打开一个文件 我想达到的效果是文件如果不存在就创建 写入是在原数据后追加 这都符合ab+特点 但是我不知道能不能读 我的语句
fread(a,sizeof(Infor),1,fp);一用就发送错误报告了~ 请问是为什么 打开方式错了么 那么应该怎么办 谢谢了
在读操作以前我加了rewind(fp)了 没用~

a+ 如果文件不存在就创建. 刚创建的文件没有内容,不能读.
b是二进制.

fread(a,sizeof(Infor),1,fp);
Infor 是否已有声明和定义? 还是 int, 你打错了?

要从正确位置开始读数据,例如从文件开始.
result = fseek( fp, 0L, SEEK_SET);

如果从中间读,后面要有足够数据好读,如故 sizeof(Infor)太大,超界,也会报错.你没有告诉报错内容,只好猜.

因为 a+模式打开之后文件指针是在末尾的,所以读之前需要 fseek一下吧

一般的经验而言,就算文件打开方式指定有错,也不会出现错误报告窗口……

目前能想到的可能的情形列明如下,请根据自己的情况自行分析解决。

-------------------

建议一:多用编译器的debug功能,比如VC跟C++ Builder,不要看见错误报告就蒙了

建议二:错误报告十有八九是由指针变量未初始化导致的,你可以检查一下:
1、你的fp有没有初始化(即检查fopen函数的执行结果是否为NULL)。
2、你的a有没有初始化。a是一个字符串类型的buffer,用于存放fread读取的结果,因此必须被事先初始化(可以声明其为静态字符数组,也可以使用malloc等函数进行动态分配空间)。同时,你还要保证你的a要足够大,可以容纳fread读出的结果。

建议三:错误报告也有可能是由指针越界或者数组下标越界导致,或者其他情况。请检查你的其他部分代码。

建议四:如果你的程序用到了动态内存分配,即C中的malloc/free和C++中的new/delete,那么请检查你的指针变量是否有非法使用的情况。因为这些情况也会导致错误报告。

建议五:随时注意文件指针位置,如果指针位置未知,则fread和fwrite可能会出现意想不到的结果甚至出错。

-----