На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Можно ли писать данные внутрь файла?
    Можно ли писать данные внутрь файла(т. е. есть файл и в его начало нужно записать что-нибудь не стирая и не перезписывая содержимое)???
      Это как? если что-то писать в начало ничего не перезаписывая (!), то все остальное (даже и первоначальное начало) сдвинется всяко разно и тогда уже первоначальное начало уже не будет началом в его смысле и станет серединой а истинным начало будет то начало, которое мы запишем на место начала!
        А просто запомнить файл в буфер, потом соеденить два буфера (в начало нового буфера поставить новые данные, и потом этот буфер в файл записать) не пойдет?
          По мне так при записи в файл никакие данные сдвигаться не будут - новые данные будут либо перезаписывать старые, либо дописываться в конец. (Сдвиг конечно принципиально организуем - нужно использовать позиционирование указателя и попеременные операции чтения и записи...)
            2acrobat,
            Так я и имел ввиду, что запись в начало ничем принципиально не отличается от записи в любое другое место файла. А насчет никакие данные сдвигаться не будут - это как? В файле 1 байт - "А", запишем перед этой буквой - букву "Б". И что "А" так и останется на своем месте? С физической точки зрения размещения этго байта в кластере (или где еще) - конечно не изменится, но отн-но самого файла внутри его? Что-то это уже какая-то философия пошла......пора завязывать........ :blink:
              Цитата Lavrik @ 14.01.04, 14:50
              2acrobat,
              В файле 1 байт - "А", запишем перед этой буквой - букву "Б". И что "А" так и останется на своем месте?

              Смотря как будем записывать ;) Но для большенства OS, запись в файл осуществляется либо поверх имеющихся данных либо в конец :(
                Heretic2, неужели в облом написать 20 строчек кода для добавления данных в начало файла?

                ExpandedWrap disabled
                   
                      HANDLE hFile = CreateFile ("f:\\1.txt", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                      if(hFile != INVALID_HANDLE_VALUE)
                      {
                          char * psz = "Hello!\r\n";
                          DWORD dwStrLen = strlen(psz);
                          if(dwStrLen > 0)
                          {
                              DWORD dwFileLen = GetFileSize (hFile, NULL);
                              DWORD dwLen = dwFileLen + dwStrLen;
                              BYTE * pbuf = new BYTE[dwLen + 1];
                              if(pbuf)
                              {
                                  strcpy((char*)pbuf, psz);
                                  DWORD dw;
                                  ReadFile (hFile, pbuf + dwStrLen, dwFileLen, &dw, NULL);
                                  *(pbuf + dwFileLen + dwStrLen) = '\0';
                                  dw = 0;
                                  SetFilePointer(hFile, 0, (PLONG)&dw, FILE_BEGIN);
                                  SetEndOfFile(hFile);
                                  WriteFile (hFile, pbuf, dwLen, &dw, NULL);
                                  delete [] pbuf;
                                  pbuf = NULL;
                              }
                          }
                          CloseHandle (hFile);
                          hFile = (HANDLE)NULL;
                      }
                Сообщение отредактировано: Bjarne Stroustrup -
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0222 ]   [ 16 queries used ]   [ Generated: 2.05.24, 10:34 GMT ]