2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Работа с файлом в VC++
Сообщение14.03.2011, 15:52 


13/12/10
2
Есть файл, структура следующая:
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 сообщение ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group