| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Удалить первые n-байт из файла |
| Автор: Dmitry_177 3.11.2006, 12:49 |
| Я работаю с файлом посредством API функций, это CreateFile, ReadFile и WriteFile. Понадобилось удалять часть файла, т.е. байты которые находятся в начале файла... Я видел в интернете что для этого можно сделать так: установить указатель в нужное место SetFilePointer, затем считать в буфер нужное колличество байт ReadFile, потом выполняется функция SetEndOfFile и наконец идет запись из буфера WriteFile... Но этот способ мне не подходит, т.к. в этот же файл постоянно происходит запись в другой программе, и мне кажется что во время всех этих действий(копирования, очистки, вставления) могут не все байты записаться... Что вы посоветуете в такой ситуации? |
| Автор: _hunter 3.11.2006, 13:04 |
| в таком случае открывай файл эксклюзивно (sharing) |
| Автор: Dmitry_177 3.11.2006, 13:15 |
| То приложение которое производит запись, да, оно постоянно держит файл открытым и у него режим совместного доступа(3-й параметр CreateFile) FILE_SHARE_READ or FILE_SHARE_WRITE. |
| Автор: Snowy 3.11.2006, 13:21 |
| Ну тогда никак. |
| Автор: Dmitry_177 3.11.2006, 13:53 |
| А если блокировать файл?... Но у меня возникло 2 вопроса по этому поводу: 1: Если заблокировать файл, и провести все те действия, то потом после всего этого где окажется указаль в файле в той программе которая производит запись? Например был там указатель в конце файла, но потом файл стал короче, где окажется указатель? в конце? т.е. переместится в "новый" конец файла? 2: Чтобы заблокировать файл, какой нужно ставить режим совместного доступа(3-й параметр CreateFile)? FILE_SHARE_READ or FILE_SHARE_WRITE так? Может можно какнибудь при помощи мьютекса? |
| Автор: Alexeis 3.11.2006, 18:16 |
Можно если обе программы свои. |
| Автор: Dmitry_177 3.11.2006, 19:01 | ||||
| Мои ))) о обоих открываю как FILE_SHARE_READ or FILE_SHARE_WRITE Добавлено @ 19:12 вроде как решил проблему, сделал я так: как только понадобилось вырезать первые байты из файла, в программе которая записывает происходят такие действия:
А в это время вырезается кусок из файла в другой программе.. А потом после того как вырезался кусок, в программе которая записывает:
Т.е. на тот момент в который происходит вырезание куска из файла, программа которая записывает в файл записывает в буфер, а потом его записывает в файл... |
| Автор: dumb 4.11.2006, 04:24 |
| сдается, что неверно выбрано решение в целом. |
| Автор: Dmitry_177 4.11.2006, 13:49 |
| Вроде работает ))) |
| Автор: Zero 4.11.2006, 18:22 |
Как всётаки сделал??? |
| Автор: Dmitry_177 4.11.2006, 21:14 |
| Zero, я же привел код... |