записывается ток 1 кб от 349 кб

#include <iostream>
#include <cstdlib>
#include <string>
#include <cstdio>
using namespace std;
#pragma warning(disable: 4996)
int main(int argc, char* argv[])
{
    FILE* ptrFile1 = fopen("test.png", "rb");

if (ptrFile1 == NULL)
{
    fputs("Ошибка файла", stderr);
    exit(1);
}

fseek(ptrFile1, 0, SEEK_END);                          // устанавливаем позицию в конец файла
long lSize = ftell(ptrFile1);                            // получаем размер в байтах
rewind(ptrFile1);                                       // устанавливаем указатель в конец файла

char* buffer = (char*)malloc(sizeof(char) * lSize); // выделить память для хранения содержимого файла
if (buffer == NULL)
{
    fputs("Ошибка памяти", stderr);
    exit(2);
}

size_t result = fread(buffer, 1, lSize, ptrFile1);       // считываем файл в буфер
if (result != lSize)
{
    fputs("Ошибка чтения", stderr);
    exit(3);
}

//содержимое файла теперь находится в буфере
puts(buffer);

// завершение работы
fclose(ptrFile1);


FILE* ptrFile = fopen("test1.png", "wb");

fwrite(buffer, 1, sizeof(buffer), ptrFile); // записать в файл содержимое буфера
fclose(ptrFile);
free(buffer);
return 0;

}

из 349 кб записывается 1кб, как можно это исправить?


Ответы (1 шт):

Автор решения: Harry

Записывается далеко не 1 Кбайт, а sizeof(buffer) байт, т.е. 4 или 8, в зависимости от разрядности вашего приложения.

buffer - это указатель, а sizeof(buffer) — размер указателя, а вовсе не того, на что он указывает.

Вас спасет

fwrite(buffer, 1, lSize, ptrFile); // записать в файл содержимое буфера
→ Ссылка