![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Я работаю с файлом посредством API функций, это CreateFile, ReadFile и WriteFile. Понадобилось удалять часть файла, т.е. байты которые находятся в начале файла... Я видел в интернете что для этого можно сделать так: установить указатель в нужное место SetFilePointer, затем считать в буфер нужное колличество байт ReadFile, потом выполняется функция SetEndOfFile и наконец идет запись из буфера WriteFile... Но этот способ мне не подходит, т.к. в этот же файл постоянно происходит запись в другой программе, и мне кажется что во время всех этих действий(копирования, очистки, вставления) могут не все байты записаться... Что вы посоветуете в такой ситуации?
|
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 8 Всего: 24 |
||||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
в таком случае открывай файл эксклюзивно (sharing)
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
То приложение которое производит запись, да, оно постоянно держит файл открытым и у него режим совместного доступа(3-й параметр CreateFile) FILE_SHARE_READ or FILE_SHARE_WRITE.
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну тогда никак.
|
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
А если блокировать файл?... Но у меня возникло 2 вопроса по этому поводу:
1: Если заблокировать файл, и провести все те действия, то потом после всего этого где окажется указаль в файле в той программе которая производит запись? Например был там указатель в конце файла, но потом файл стал короче, где окажется указатель? в конце? т.е. переместится в "новый" конец файла? 2: Чтобы заблокировать файл, какой нужно ставить режим совместного доступа(3-й параметр CreateFile)? FILE_SHARE_READ or FILE_SHARE_WRITE так? Может можно какнибудь при помощи мьютекса? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Можно если обе программы свои. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Dmitry_177 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Мои ))) о обоих открываю как FILE_SHARE_READ or FILE_SHARE_WRITE
Добавлено @ 19:12 вроде как решил проблему, сделал я так: как только понадобилось вырезать первые байты из файла, в программе которая записывает происходят такие действия:
А в это время вырезается кусок из файла в другой программе.. А потом после того как вырезался кусок, в программе которая записывает:
Т.е. на тот момент в который происходит вырезание куска из файла, программа которая записывает в файл записывает в буфер, а потом его записывает в файл... Это сообщение отредактировал(а) Dmitry_177 - 3.11.2006, 19:15 |
||||
|
|||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
сдается, что неверно выбрано решение в целом.
|
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Вроде работает )))
|
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 8 Всего: 24 |
||||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Zero, я же привел код...
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |