Я борюсь с бинарными файлами. У меня есть следующий класс:Получение мусора при попытке записи в двоичный файл
class __attribute__((__packed__)) FileEntry {
unsigned char filename[8];
unsigned char extension[3];
unsigned char type;
unsigned char reserved;
unsigned char tenths_of_second;
unsigned short creation_time;
unsigned short creation_date;
unsigned short last_accessed;
unsigned short high_first_cluster;
unsigned short last_modification_time;
unsigned short last_modification_date;
unsigned short low_first_cluster;
unsigned int size;
};
У меня также есть следующий метод, который является тот, кто дает мне проблему:
void Fat16FileSystem::writeToFS() {
BootSector b(512,128,1,1,2048,0,0xf8,128,32,64,2048,4194304);
FATTable f(b.total_sectors);
FileEntry fe;
char n = 0;
memset(&fe, 0, sizeof(fe));
//memset(&fi, 0, 512);
b.WriteToFS(file);
cout << "Writing the fillers" << endl;
for (int j = 0; j < (b.bytes_per_sector - 512)/512; j++) {
fwrite(&n, 1, 512, file);
}
cout << (b.bytes_per_sector - 512)/512 << " fillers was written" << endl;
f.writeToFs(file);
cout << "Writing " << b.directory_entries << " directory entries to FS" << endl;
for (int i = 0; i < b.directory_entries; i++) {
fwrite(&fe, sizeof(fe), 1, file);
}
fflush(file);
cout << "Writing " << b.large_total_sectors << " fillers to FS";
for (long k = 0; k < b.large_total_sectors; k++) {
fwrite(&n, 1, 512, file);
}
}
Кажется, не будет работать до той части, где он пишет записи каталога, после чего, похоже, переписывает начало. Используя редактор Hex, я мог видеть, что символы, которые он пишут, совпадают с частью bootsector. Может кто-нибудь объяснить, почему?
Не используйте литералы с fwrite: меньше головных болей. – ZDF
@ZDF что вы имеете в виду? – FrankTominc
@FrankTomnic См. Мой ответ ниже. – ZDF