C # .NET 4.0
У меня возникла интересная проблема с чтением нестандартного формата файлового архива.В C # я написал программу, которая создает заголовок архива (некоторая дополнительная информация об архиве в целом, количестве файлов и тому подобное).Затем он принимает входной файл для хранения, читает и байтов, а затем записывает некоторые служебные данные о файле (имя файла, тип, размер и т. Д.), А затем фактические данные файла.Я также могу извлечь файлы из архива через эту программу.Чтобы проверить его, я сохранил изображение в формате png и извлек его, считав размер файла из служебной информации, а затем выделив массив байтов такого размера, извлек файловые данные в этот массив и затем записал его с помощью потокового редактора.Ничего страшного, работал нормально.Теперь перейдем к стороне C ++ ...
C ++
Моя программа на C ++ должна прочитать данные файла, определить тип файла и затем передать ихсоответствующий класс обработки.Классы обработки давали ошибки, которых у них быть не должно.Поэтому я решил выписать данные файла из программы на C ++ после прочтения с помощью fwrite (), и полученный файл оказался поврежденным?В двух словах, это код, который используется для чтения файла ...
unsigned char * data = 0;
char temp = 0;
__int64 fileSize = 0;
fread(&fileSize, sizeof(__int64), 1, _fileHandle);
data = new unsigned char[fileSize];
for (__int64 i = 0; i < fileSize; i++)
{
fread(&temp, 1, 1, _fileHandle);
data[i] = temp;
}
(Я сейчас на работе, поэтому я просто написал это по памяти. Однако я на 99%положительно, это точно для моего кода дома. Сейчас меня тоже не интересуют стандарты MS, поэтому, пожалуйста, имейте в виду __int64.)
Я не прошел все 300 с лишним тысяч байт, чтобы определитьесли все соответствует, но первые 20 или около того байтов, на которые я смотрел, кажутся правильными.Я не совсем понимаю, почему есть проблема.Есть ли что-то смешное в fread ()?Я также дважды проверил файл в архиве, удалил все служебные данные архива и сохранил только данные изображения в новое изображение png с помощью блокнота, который работал нормально.
Должен ли я читать это по-другому?Что-то не так с использованием fread () для чтения этих данных?