записывается ток 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); // записать в файл содержимое буфера