使用 fread 将所有文件内容复制到 char 数组中

Copying all file contents into a char array with fread

我正在尝试将一个文件的内容,特别是一个 PDF 文件复制到一个字符数组中,以便我可以通过网络发送它。

我为此使用了带有 fread 的 fopen。

//Get the file path
getFilePath();
//Open the file
fopen_s(&fp, filePath, "r");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
rewind(fp);
//allocate memory
buffer = (char*)malloc(sizeof(char)*size);

int charsTransferred = fread(buffer, 1, size, fp);

fclose(fp);
free(buffer);

我有 charsTransferred 以查看 fread 传输了多少字符。使用 size 我可以知道应该移动多少个字符,但显然我没有得到那么多。有谁知道这里的问题是什么?

首先,如果是 PDF,您需要以二进制模式打开,我认为它是二进制格式。然后 seek end / ftell 方法对于非常大的文件以及文本文件(在磁盘上物理上抑制了字符)往往会失败。没有一种纯 ANSI C 的文件统计方式,但函数 stat() 广泛可用,并为您提供文件大小。

您的代码中可能有问题,您没有显示。

这个有效:

#include <stdio.h>
#include <stdlib.h>

void main()
{
  FILE *fp;

  if (fopen_s(&fp, "somepdfile.pdf", "rb"))
  {
    printf("Failed to open file\n");
    exit(1);
  }

  fseek(fp, 0, SEEK_END);
  int size = ftell(fp);
  rewind(fp);

  char *buffer = (char*)malloc(sizeof(char)*size);
  if (!buffer)
  {
    printf("Failed to malloc\n");
    exit(1);
  }

  int charsTransferred = fread(buffer, 1, size, fp);
  printf("charsTransferred = %d, size = %d\n", charsTransferred, size);

  fclose(fp);
  free(buffer);
}