2016-10-24 2 views
1

Я вроде как новый для операций с файлами, используемых в C. Я хочу прочитать файл, скопировать его содержимое в буфер и затем скопировать содержимое из этого буфера в новый файл. (Цель для использования этого буфера в другой задаче) Я использую приведенный ниже код для чтения моего файла в буферПрочитайте файл в буфере, затем напишите буфер в новом файле

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

int main() 
{ 
    FILE * fileP; 
    long size; 
    char * buffer; 
    size_t final; 

    fileP= fopen ("C:\\Users\\test.pdf" , "rb"); 
    if (fileP==NULL) {fputs ("File error",stderr); 
    exit (1); 
    } 

    // calculating file size 
    fseek (fileP, 0 , SEEK_END); 
    size = ftell (fileP); 
    rewind (fileP); 

    // allocating mem for file 
    buffer = (char*) malloc (sizeof(char)*size); 
    if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} 

    // copying file into buffer 
    final = fread (buffer,1,size,fileP); 
    if (final != size) 
    { 
     fputs ("Reading error",stderr); 
     exit (3); 
    } 
    // the whole file is now loaded in the memory buffer. 

    fclose (fileP); 
    free (buffer); 
    return 0; 
} 

Я знаю, что нужно использовать FWRITE для записи содержимого буфера в к новый файл, но я не могу понять, какие параметры будут записаны в нем. Или есть лучшее решение для этого?

+3

Вы будете счастливы услышать, что вы можете использовать * точные параметры *, как в 'fread'! – usr2564301

+0

Вы записываете в новый файл так же, как вы читаете из старого файла. т. е. вы должны использовать 'fwrite' для записи файла. –

+0

@RadLexus вы имеете в виду fwrite? fwrite (buffer, 1, size, fileP) – Jane

ответ

2

Джейн,

Прежде чем fwrite нибудь, сначала нужно fopen файл назначения.

[Source File] ---> [Memory Buffer] ---> [Файл назначения]

Классическая последовательность для записи буфера памяти в файл выглядит следующим образом:

// Open File for writing 
FILE *f_dst = fopen("C:\\foo.txt", "wb"); 
if(f_dst == NULL) 
{ 
    printf("ERROR - Failed to open file for writing\n"); 
    exit(1); 
} 

// Write Buffer 
if(fwrite(buffer, 1, size, f_dst) != size) 
{ 
    printf("ERROR - Failed to write %i bytes to file\n", size); 
    exit(1); 
} 

// Close File 
fclose(f_dst); 
f_dst = NULL; 

Кроме того, я заметил, в вашем коде вокруг fread, ваши путают «результат» и «конечные» переменные («результат» не существует):

// copying file into buffer 
final = fread (buffer,1,size,fileP); 
if (result != size) 
+0

Да, переменная результата была ошибочно использована, я сейчас редактировал свой вопрос. Я попробую, что вы ответили, а затем прокомментирует дальше. – Jane

+0

Это сработало, спасибо. Однако знаете ли вы, как я могу извлечь заголовок файла .docx? @Eresse – Jane

+0

@Jane, я не знаком с форматами документов Microsoft. Тем не менее, я думаю, что ваш лучший вариант - задать это в новом вопросе. – Eresse

Смежные вопросы