簡體   English   中英

使用fread將所有文件內容復制到char數組中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM