Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.137.218] |
|
Сообщ.
#1
,
|
|
|
Можно ли писать данные внутрь файла(т. е. есть файл и в его начало нужно записать что-нибудь не стирая и не перезписывая содержимое)???
|
Сообщ.
#2
,
|
|
|
Это как? если что-то писать в начало ничего не перезаписывая (!), то все остальное (даже и первоначальное начало) сдвинется всяко разно и тогда уже первоначальное начало уже не будет началом в его смысле и станет серединой а истинным начало будет то начало, которое мы запишем на место начала!
|
Сообщ.
#3
,
|
|
|
А просто запомнить файл в буфер, потом соеденить два буфера (в начало нового буфера поставить новые данные, и потом этот буфер в файл записать) не пойдет?
|
Сообщ.
#4
,
|
|
|
По мне так при записи в файл никакие данные сдвигаться не будут - новые данные будут либо перезаписывать старые, либо дописываться в конец. (Сдвиг конечно принципиально организуем - нужно использовать позиционирование указателя и попеременные операции чтения и записи...)
|
Сообщ.
#5
,
|
|
|
2acrobat,
Так я и имел ввиду, что запись в начало ничем принципиально не отличается от записи в любое другое место файла. А насчет никакие данные сдвигаться не будут - это как? В файле 1 байт - "А", запишем перед этой буквой - букву "Б". И что "А" так и останется на своем месте? С физической точки зрения размещения этго байта в кластере (или где еще) - конечно не изменится, но отн-но самого файла внутри его? Что-то это уже какая-то философия пошла......пора завязывать........ |
Сообщ.
#6
,
|
|
|
Цитата Lavrik @ 14.01.04, 14:50 2acrobat, В файле 1 байт - "А", запишем перед этой буквой - букву "Б". И что "А" так и останется на своем месте? Смотря как будем записывать Но для большенства OS, запись в файл осуществляется либо поверх имеющихся данных либо в конец |
Сообщ.
#7
,
|
|
|
Heretic2, неужели в облом написать 20 строчек кода для добавления данных в начало файла?
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; } |