2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Работа с файлом в VC++
Сообщение14.03.2011, 15:52 
Есть файл, структура следующая:
1-ая запись - содержит значение длиной 2 байта
2- ая - 8 байт
3 - ья - 12 байт
с 4 и до конца(всего 24 записи) каждая длиной по 4 байта.
В новый файл копирую 1-ую, 2, 3 записи и 4 записи по 4 байта,затем вношу две записи по 4 байта со значением 0, а остальные записи скопировать не получается. Подскажите как сделать пожалуйста или наведите на мысль. Исходный код прилагаю:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
  1. void TLDDlg::OnBtnStart()
  2. {
  3. CString fname, real_name, buf, tmp;
  4. CFile file, file_new;
  5. char *buff;
  6. int len_file;
  7.  
  8.         if(m_sPathFile == "")
  9.                 return;
  10.  
  11.         file.Open(m_sPathFile, CFile::modeRead | CFile::typeBinary);
  12.         buff = new char[file.GetLength()];
  13.         file.Seek(0, 0);
  14.         len_file = file.Read(buff, file.GetLength());
  15.         file.Close();
  16.         buf = buff;
  17.         int off = buf.Find("PN", 0);
  18.         if(off != -1)
  19.         {       AfxMessageBox("Файл переведен");
  20.                 delete []buff;
  21.                 return;
  22.         }
  23.  
  24.         real_name = m_sPathFile;
  25.  
  26.         fname = real_name.Right(real_name.GetLength() - real_name.ReverseFind('\\')-1);
  27.         fname = fname.Left(fname.ReverseFind('.')) + "***";
  28.         fname = MakeUniqueFileName(fname);
  29.  
  30.         CFile::Rename(real_name, fname);
  31.  
  32.         file.Open(fname, CFile::modeRead | CFile::typeBinary);
  33.         file_new.Open(real_name, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
  34.  
  35.         file.Seek(0, 0);
  36.         file_new.Seek(0, 0);
  37.  
  38.         len_file = file.Read(buff, file.GetLength());
  39.         buf = buff;
  40.  
  41.  
  42.         off = buf.Find("~Zr", 0);
  43.  
  44.         int off2 = off;
  45.  
  46. // Редактирование текстового содержания в файле
  47.         off = buf.Find("PGAN", 0);
  48.         file_new.Write(buff, off);     
  49.         off = buf.Find("~Records", 0);
  50.         off = buf.Find("\r\n", off)+2;
  51.         file_new.Write(buff+off2, off-off2);
  52.  
  53. // данные
  54.         float add_block[2]; ZeroMemory(add_block, sizeof(add_block));
  55.         while(off < len_file)
  56.         {
  57.                 file_new.Write(buff+off, 22+4*4); //копирую первые три записи и 4 записи по 4 байта
  58.                 file_new.Write(add_block, sizeof(add_block)); //затем две записи по 4 байта со значением 0
  59. //что сделать чтобы добавить остальные 20 записей по 4байта каждая?
  60. //      off += (22+4*4);
  61.                
  62.         }
  63.  
  64.         delete []buff;
  65.         file_new.Close();
  66.         file.Close();
  67.         AfxMessageBox("OK");
  68. }

 
 
 [ 1 сообщение ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group