使用 C 将整数读取和写入二进制文件?
Reading and writing integers to a binary file using C?
我正在尝试将 100 个整数写入二进制文件。我试过写入此文件并从中读取。从中读取时,我得到了完全随机的数字。
这是关于写入的块。
请注意,我已使用 "wb" 模式打开文件进行写入。最后我也关闭了文件。
for (int i = 0; i < 99; i++) {
fwrite(&i, sizeof(int), 1, file);
}
这是关于读取的块。
请注意,我确实在此处以 "rb" 模式打开了文件,但它已关闭。
int num;
for (int i = 0; i < 100; i++) {
int rc = getc(file);
if (rc == EOF) {
fputs("Error occured while reading file", stderr);
return EXIT_FAILURE;
}
fread(&num, sizeof(int), 1, file);
printf("%d", num);
}
我的输出是这样的:
-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767-1097029212883066888388440148657280313254001912147440795-168942592032767-109702911303445504838844014865730434362077432147440795-168935577632767-1097029063753420883766251486573257-6039796492147440795-168932864032767-109702901326841856838844014865733541270-168949760032767-10970289133241241683884401486573450-1090518913214744079500196944831217016018891752457584192041348617175279241952408940298110176910929517683167731702125413116313304413809989891296126535181930809719192433591818324585127960891517680423011935761967-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767
所以有问题,我不确定具体是什么。也许我不确定我是否完全理解 reading/writing 的 API(特别是 size_t nitems)?我不确定如何判断我需要从文件中 read/write 多少字节。
在第一个循环中,您从 'i' 的地址开始写入 100 个整数,共 99 次。
不是我想你想的那样。
应该是
fwrite(&i, sizeof(int), 1, file);
其次,你是用什么方式打开文件写入的?它应该以二进制模式打开,否则将无法正确保存二进制数据(将 'b' 添加到 fopen 模式值)
您是否关闭并重新打开文件以供读取(并设置正确的文件模式?)或者如果我保持打开状态,您是否会在尝试读取值之前先回到文件开头。
我正在尝试将 100 个整数写入二进制文件。我试过写入此文件并从中读取。从中读取时,我得到了完全随机的数字。
这是关于写入的块。
请注意,我已使用 "wb" 模式打开文件进行写入。最后我也关闭了文件。
for (int i = 0; i < 99; i++) {
fwrite(&i, sizeof(int), 1, file);
}
这是关于读取的块。 请注意,我确实在此处以 "rb" 模式打开了文件,但它已关闭。
int num;
for (int i = 0; i < 100; i++) {
int rc = getc(file);
if (rc == EOF) {
fputs("Error occured while reading file", stderr);
return EXIT_FAILURE;
}
fread(&num, sizeof(int), 1, file);
printf("%d", num);
}
我的输出是这样的:
-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767-1097029212883066888388440148657280313254001912147440795-168942592032767-109702911303445504838844014865730434362077432147440795-168935577632767-1097029063753420883766251486573257-6039796492147440795-168932864032767-109702901326841856838844014865733541270-168949760032767-10970289133241241683884401486573450-1090518913214744079500196944831217016018891752457584192041348617175279241952408940298110176910929517683167731702125413116313304413809989891296126535181930809719192433591818324585127960891517680423011935761967-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767
所以有问题,我不确定具体是什么。也许我不确定我是否完全理解 reading/writing 的 API(特别是 size_t nitems)?我不确定如何判断我需要从文件中 read/write 多少字节。
在第一个循环中,您从 'i' 的地址开始写入 100 个整数,共 99 次。
不是我想你想的那样。
应该是
fwrite(&i, sizeof(int), 1, file);
其次,你是用什么方式打开文件写入的?它应该以二进制模式打开,否则将无法正确保存二进制数据(将 'b' 添加到 fopen 模式值)
您是否关闭并重新打开文件以供读取(并设置正确的文件模式?)或者如果我保持打开状态,您是否会在尝试读取值之前先回到文件开头。