2013-06-20 4 views
0

Я читаю полный файл в кадре, также файл фильма. Затем я использую этот буфер для записи нового файла, например 50 КБ. Поправьте меня, что это неправильно? Ниже приведен пример кода:Это хорошая идея, чтобы прочитать полный файл за один выстрел?

FILE * pFile; 
    long lSize; 
    char * buffer; 
    size_t result; 

    pFile = fopen ("myfile.bin" , "rb"); 
    if (pFile==NULL) {fputs ("File error",stderr); exit (1);} 

    // obtain file size: 
    fseek (pFile , 0 , SEEK_END); 
    lSize = ftell (pFile); 
    rewind (pFile); 

    // allocate memory to contain the whole file: 
    buffer = (char*) malloc (sizeof(char)*lSize); 
    if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} 

    // copy the file into the buffer: 
    result = fread (buffer,1,lSize,pFile); 
    if (result != lSize) {fputs ("Reading error",stderr); exit (3);} 

    /* the whole file is now loaded in the memory buffer. */ 

    // terminate 
    fclose (pFile); 
    free (buffer); 
+0

Один из способов проверить это - записать буфер в новый файл и использовать утилиту сравнения, чтобы убедиться, что они идентичны. –

ответ

1

Модель считывателя потоков используется для чтения файла, так как нет ограничений на размер файла, но существует ограничение на объем памяти, который вы можете использовать. Нет проблем, если размер вашего файла достаточно мал, чтобы полностью храниться в памяти, но если вы читаете мультимедийный файл, например, 4 ГБ + DVD ISO, я думаю, что ваша программа будет потреблять слишком много памяти и не сможет работать на компьютере с низким разрешением.

+0

получил это! спасибо @imkrisna – jack

1

Это окей, пока вы не достаточно свободной памяти ... Но будьте осторожны, если файл больше 4 Гб, и вы используете 32-битный компилятор.

+1

Я не знаю, где будет работать ваша программа. Если вы уверены, что на вашем компьютере будет достаточно памяти, тогда это нормально, но в противном случае нет. Но если вам не нужно выполнять операции над всем файлом, лучше читать фрагменты файлов. – jtomaszk

+0

k thank u @ Warthel4578 – jack

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