Здравствуйте, помогите разобратcа в коде

Код программы (Листинг)
Код на языке VС++:
//zoternik ZAV
//подключение библиотек
#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[])
ZAVBFile::ZAVBFile () {
this->RecordCount = 0;
}
//! Закрытие файла
void ZAVBFile::close(){
if(hFile.is_open()) hFile.close();
}
//! Проверка состояния файла
bool ZAVBFile::is_open(){
return hFile.is_open();
}
//! Получение числа файлов
DWORD ZAVBFile::getRecordCount (){
return this->RecordCount;
}
62
//! Открытие файла
bool ZAVBFileWriter::open(PCSTR FileName){
if (FileName == NULL) return false;
// - Если файл не найден то создаем его прототип
if(!isFileExist(FileName)){
hFile.open(FileName, ios::out | ios::binary);
if(!hFile.is_open()) return false;
hFile.write("AVB", 3); // - Сигнатура файла
hFile.write((PCSTR)&this->RecordCount, sizeof(DWORD)); // - Число
записей
// - Иначе открываем и проверяем валидность
}else{
hFile.open(FileName, ios::in | ios::out | ios::binary);
if (!hFile.is_open()) return false;
// - Проверка сигнатуры
CHAR Sign[3];
hFile.read((PSTR)Sign, 3);
if(memcmp(Sign, "AVB", 3)){
hFile.close(); // - Это чужой файл
return false;
}
// - Читаем число записей
hFile.read((PSTR)&this->RecordCount, sizeof(DWORD));
}
return true;
} 
63
bool ZAVBFileWriter::addRecord(PSAVRecord Record){
if (Record == NULL || !hFile.is_open()) return false;
// - Перемещаемся в конец файла
hFile.seekp(0, ios::end);
// - Добавляем запись
hFile.write ((PSTR)&Record->Signature.Offset, sizeof(DWORD)); // -
Смещение сигнатуры
hFile.write((PSTR)&Record->Signature.Lenght, sizeof(DWORD)); // -
Размер сигнатуры
hFile.write((PSTR)&Record->Signature.Hash, 4 * sizeof(DWORD)); // -
Контрольная сумма
hFile.write((PSTR)&Record->NameLen, sizeof(BYTE)); // - Размер
имени
hFile.write((PSTR)Record->Name, Record->NameLen); // - Имя
// - Смещаемся к числу записей
hFile.seekp(3, ios::beg);
// - Увеличиваем счётчик записей
this->RecordCount++;
hFile.write((PSTR)&this->RecordCount, sizeof(DWORD));
return true;
}
bool ZAVBFileReader::open(PCSTR FileName){
if(FileName == NULL) return false;
// - Если файл не найден, то создаем его прототип
if(isFileExist(FileName)){
hFile.open(FileName, ios::in | ios::out | ios::binary);
if(!hFile.is_open()) return false; 
64
// - Проверка сигнатуры
CHAR Sign[3];
hFile.read((PSTR)Sign, 3);
if(memcmp(Sign, "AVB", 3)){
hFile.close(); // - Это чужой файл
return false;
}
// - Читаем число записей
hFile.read((PSTR)&this->RecordCount, sizeof(DWORD));
}else{ return false; }
return true;
}
bool ZAVBFileReader::readNextRecord(PSAVRecord Record){
if(Record == NULL || !hFile.is_open()) return false;
hFile.read((PSTR)&Record->Signature.Offset, sizeof(DWORD)); // -
Смещение сигнатуры
hFile.read((PSTR)&Record->Signature.Lenght, sizeof(DWORD)); // -
Размер сигнатуры
hFile.read((PSTR)&Record->Signature.Hash, 4 * sizeof(DWORD)); // -
Контрольная сумма
hFile.read((PSTR)&Record->NameLen, sizeof(BYTE)); // - Размер
имени
Record->allocName(Record->NameLen);
hFile.read((PSTR)Record->Name, Record->NameLen); // - Имя
return true;
}

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