2015-11-12 2 views
0

Я запишет данные из моего буфера, который определяется какЗапись буфера в файл (хранится 1585 байт вместо 1580)

char outBuff[16000]; 

в файл. Я загрузил данные из другого файла 1580 байт. После этого я сохранил эти данные в новом файле с функцией WriteAllBytes. В переменной count было значение = 1580, но размер файла на диске составлял 1585 байт. Оттуда это различие?

static bool WriteAllBytes(char * filename, const char * pWriteBuff, int size) 
{ 
    FILE * pFile = fopen(filename, "w"); 

    ofstream fout("test.txt"); 

    if (!pFile) 
    return false; 

    int count = 0; 

    for (int i = 0; i < size; i++) 
    { 
    if (fwrite(pWriteBuff, 1, 1, pFile) != NULL) 
    { 
     pWriteBuff++; 
     count ++; 
    } 

    fout << *pWriteBuff; 
    } 

    if (count != size) 
    return false; 

    fclose(pFile); 
} 
+0

Показать, как вы называете 'WriteAllBytes'. Не имеет прямого отношения к вашему вопросу: почему бы вам просто не называть один раз 'fwrite (pWriteBuff, 1, size, pFile)' вместо того, чтобы писать 'size' раз один сингл-байт? BTW посмотрите на свой код, там '}' отсутствует где-нибудь около 'count ++'. –

+0

Примечание: файлы уже буферизованы ОС. Если вы используете 'std :: ofstream', они также буферизуются объектом. –

+0

Обновите свой вопрос вместо комментариев. –

ответ

1
FILE * pFile = fopen(filename, "w"); 

Должно быть

FILE * pFile = fopen(filename, "wb"); 

Вы открываете файл в текстовом режиме, когда вы должны открыть в двоичном режиме. В Windows это приведет к необходимости записи дополнительного \r (0xD) перед каждым \n (0xA).

+0

thx, это было полезно – Sauber

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