Есть файл, структура следующая:
1-ая запись - содержит значение длиной 2 байта
2- ая - 8 байт
3 - ья - 12 байт
с 4 и до конца(всего 24 записи) каждая длиной по 4 байта.
В новый файл копирую 1-ую, 2, 3 записи и 4 записи по 4 байта,затем вношу две записи по 4 байта со значением 0, а остальные записи скопировать не получается. Подскажите как сделать пожалуйста или наведите на мысль. Исходный код прилагаю:
void TLDDlg::OnBtnStart()
{
CString fname, real_name, buf, tmp;
CFile file, file_new;
char *buff;
int len_file;
if(m_sPathFile == "")
return;
file.Open(m_sPathFile, CFile::modeRead | CFile::typeBinary);
buff = new char[file.GetLength()];
file.Seek(0, 0);
len_file = file.Read(buff, file.GetLength());
file.Close();
buf = buff;
int off = buf.Find("PN", 0);
if(off != -1)
{ AfxMessageBox("Файл переведен");
delete []buff;
return;
}
real_name = m_sPathFile;
fname = real_name.Right(real_name.GetLength() - real_name.ReverseFind('\\')-1);
fname = fname.Left(fname.ReverseFind('.')) + "***";
fname = MakeUniqueFileName(fname);
CFile::Rename(real_name, fname);
file.Open(fname, CFile::modeRead | CFile::typeBinary);
file_new.Open(real_name, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
file.Seek(0, 0);
file_new.Seek(0, 0);
len_file = file.Read(buff, file.GetLength());
buf = buff;
off = buf.Find("~Zr", 0);
int off2 = off;
// Редактирование текстового содержания в файле
off = buf.Find("PGAN", 0);
file_new.Write(buff, off);
off = buf.Find("~Records", 0);
off = buf.Find("\r\n", off)+2;
file_new.Write(buff+off2, off-off2);
// данные
float add_block[2]; ZeroMemory(add_block, sizeof(add_block));
while(off < len_file)
{
file_new.Write(buff+off, 22+4*4); //копирую первые три записи и 4 записи по 4 байта
file_new.Write(add_block, sizeof(add_block)); //затем две записи по 4 байта со значением 0
//что сделать чтобы добавить остальные 20 записей по 4байта каждая?
// off += (22+4*4);
}
delete []buff;
file_new.Close();
file.Close();
AfxMessageBox("OK");
}