[英]Copying all file contents into a char array with fread
我正在嘗試將文件(尤其是PDF文件)的內容復制到字符數組中,以便可以通過網絡發送它。
我為此使用fopen與fread。
//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轉移了多少個字符。 使用大小,我可以知道應該移走多少個字符,但是很明顯,我沒有得到多少。 有誰知道這里的問題可能是什么?
您未顯示的代碼部分可能存在問題。
這有效:
#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是二進制格式,則需要以二進制模式打開。 然后,對於非常大的文件以及文本文件(物理上已抑制了磁盤上的字符),seek end / ftell方法往往會失敗。 沒有純粹的ANSI C方式來聲明文件,但是stat()函數可廣泛使用,並為您提供文件大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.