C、C++读写二进制文件

2024-12-01 13:09:31
推荐回答(5个)
回答1:

读和写的变量类型要一致。
用 char 写的 用 short int 读,要使读出的内容有意义,要注意码的转换,小端码别忘了 字节次序 的交换。
feof(fp) 的判断,应当在读语句执行后判断,而不是在读以前判断。又读又写时,若判断时机不对,会带来问题。
注意读写位置。
你的程序没大问题。写全如下:
#include
#include
#include
#include
using namespace std;
main()
{

short b=1; // 同一类型
FILE *fp;
FILE *fp2;
int i;
for (i=0;i<3;i++)
{
fp2=fopen("GTBL.dat","ab");
short addsize=0;
cout<<"size";
cin >> addsize;
fwrite((char *)(&addsize), 2,1,fp2);
fclose(fp2);
}

fp=fopen("GTBL.dat","rb");
while(1)
{
fread(&b,sizeof(short),1,fp);
if (feof(fp)) break; // 读后判断EOF
printf("b=%d\n",b);
}
fclose(fp);
return 0;
}

回答2:

  #include
  写二进制文件

  写二进制文件应该使用ofstream类,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。
  下面是示例代码,用于写入文件。
  std::ofstream fout("a.dat", std::ios::binary);
  int nNum = 20;
  std::string str("Hello, world");
  fout.write((char*)&nNum, sizeof(int));
  fout.write(str.c_str(), sizeof(char) * (str.size()));
  fout.close();
  而写文本文件则比较简单,如下:
  std::ofstream fout("b.dat");
  int nNum = 20;
  std::string str("Hello, world");
  fout << nNum << "," << str << std::endl;
  fout.close();
  读二进制文件
  读取二进制文件可以使用ifstream 类来进行,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。
  下面是示例代码:

  std::ifstream fin("a.dat", std::ios::binary);
  int nNum;
  char szBuf[256] = {0};
  fin.read((char*)&nNum, sizeof(int));
  fin.read(szBuf, sizeof(char) * 256);
  std::cout << "int = " << nNum << std::endl;
  std::cout << "str = " << szBuf << std::endl;
  fin.close();

回答3:

EOF是关闭文件之后自动产生的,它不并是由人工写 的。
所以不是这原因

回答4:

开打方式的问题吧
ab+才对吧
估计是打开的时候,直接以新建文件方式打开,读的是一个空文件

回答5:

你把addsize这个表示大小的变量 的地址 传给了 fwrite函数的第一个参数 缓冲区地址 你确定这样没问题??