使用 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);
}
我正在尝试将一个文件的内容,特别是一个 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);
}