以二进制模式 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".

谢谢!