История изменений
Исправление zer0cat, (текущая версия) :
Опять столкнулся со странной ошибкой этого самого fread. Вроде все хорошо делаю. Простой пример, читаем данные и перезаписываем их назад поблоков. Уходит в бесконечный цикл..
Корректно читает 1, 2, 3 мегабайты, а дальше начинается бред.
#define BLOCK_SIZE 1024*1024
int badread(const char* file_name)
{
FILE* f = NULL;
size_t dwWR = 0;
uint64_t pos = 0;
f = fopen(file_name, "r+b");
if (f != NULL)
{
uint8_t* lpBuf = malloc(BLOCK_SIZE);
memset(lpBuf, 0, BLOCK_SIZE);
do
{
dwWR = fread(lpBuf, sizeof(uint8_t), BLOCK_SIZE, f); //размер элемента, к-тво элементов
if (dwWR == 0) break;
pos = dwWR;
fseek(f, -pos, SEEK_CUR);
if ((fwrite(lpBuf, sizeof(uint8_t), dwWR, f)) != dwWR)
{
puts("fwrite");
break;
}
} while (!feof(f));
FREE(lpBuf);
fclose(f);
}
return 1;
}
Исходная версия zer0cat, :
Опять столкнулся со странной ошибкой этого самого fread. Вроде все хорошо делаю. Простой пример, читаем данные и перезаписываем их назад поблоков. Уходит в бесконечный цикл..
Корректно читает 1, 2, 3 мегабайты, а дальше начинается бред.
#define BLOCK_SIZE 1024*1024
int badread(const char* file_name, uint32_t step)
{
int bOk = 0;
FILE* f = NULL;
size_t dwWR = 0;
uint64_t pos = 0;
f = fopen(file_name, "r+b");
if (f != NULL)
{
uint8_t* lpBuf = malloc(BLOCK_SIZE);
memset(lpBuf, 0, BLOCK_SIZE);
do
{
dwWR = fread(lpBuf, sizeof(uint8_t), BLOCK_SIZE, f); //размер элемента, к-тво элементов
if (dwWR == 0) break;
pos = dwWR;
fseek(f, -pos, SEEK_CUR);
if ((fwrite(lpBuf, sizeof(uint8_t), dwWR, f)) != dwWR)
{
puts("fwrite");
break;
}
} while (!feof(f));
FREE(lpBuf);
fclose(f);
bOk = 1;
}
else
puts("fopen");
return bOk;
}