以二进制模式 fopen returns 对现有文件为空
fopen in binary mode returns null to existing file
我有一个二进制文件 ('''simdisk.bin''')。我以 'r' 模式打开它,我可以毫无问题地阅读它。现在,我想以二进制模式 (rb+) 打开它以二进制方式写入和读取,但我得到一个空指针。
我制作了一个 test.c 文件来尝试使用这个 main:
int main(int argc, char const *argv[])
{
fp = fopen("simdisk.bin", "rb+");
printf("Ptr: %p\n", fp);
fclose(fp);
}
我猜你没有权限 write 到文件,这是你用 +
修饰符请求的,它什么也没有与二进制事物(b
修饰符)有关。
试试这个,它会告诉你无法打开文件的原因 - 找不到?没有许可?等等
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc, char *argv[])
{
FILE *fp = fopen("simdisk.bin", "rb+");
if (fp == 0)
{
printf("Cannot open file: error=%s\n", strerror(errno));
exit(EXIT_FAILURE);
}
printf("Ptr: %p\n", fp);
fclose(fp);
return EXIT_SUCCESS;
}
您还可以通过将模式更改为 "rb"
来进行测试 - 需要读取+二进制但不更新 - 它可能工作得很好,因为你没有要求 write 到文件。
实际上我没有在上面写的权限。我不得不更改权限:"chmod 777 simdisk.bin".
谢谢!
我有一个二进制文件 ('''simdisk.bin''')。我以 'r' 模式打开它,我可以毫无问题地阅读它。现在,我想以二进制模式 (rb+) 打开它以二进制方式写入和读取,但我得到一个空指针。
我制作了一个 test.c 文件来尝试使用这个 main:
int main(int argc, char const *argv[])
{
fp = fopen("simdisk.bin", "rb+");
printf("Ptr: %p\n", fp);
fclose(fp);
}
我猜你没有权限 write 到文件,这是你用 +
修饰符请求的,它什么也没有与二进制事物(b
修饰符)有关。
试试这个,它会告诉你无法打开文件的原因 - 找不到?没有许可?等等
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc, char *argv[])
{
FILE *fp = fopen("simdisk.bin", "rb+");
if (fp == 0)
{
printf("Cannot open file: error=%s\n", strerror(errno));
exit(EXIT_FAILURE);
}
printf("Ptr: %p\n", fp);
fclose(fp);
return EXIT_SUCCESS;
}
您还可以通过将模式更改为 "rb"
来进行测试 - 需要读取+二进制但不更新 - 它可能工作得很好,因为你没有要求 write 到文件。
实际上我没有在上面写的权限。我不得不更改权限:"chmod 777 simdisk.bin".
谢谢!