![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
olegarh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
В общем прога c++/clr использует класс FileSystemWatcher
Суть в том , что при добавлении файла в директорию программа делает какой либо вывод файл с помощью fstream. получается так что файл открыт всегда т.к. программа отслеживает директорию постоянно выглядит это примерно так. не буду приводить весь код
в итоге получается что файл закрывается только тогда когда я выхожу из программы.. (после завершения класса watcher) который соответственно постоянно отслеживает директорию... Т.к. файл используется программой, то когда она работает я его открыть не могу, а даже если открою то он будет незакончен (т.к. это xml, то это существенно) Итак вопрос. Можно как то "приостанавливать" поток, что бы можно было просматривать файл пока программа в режиме ожидания. и что бы он конечно был валидным (законченым) надеюсь я доступно объяснил))) |
|||
|
||||
maydjin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
||||
|
||||
olegarh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
Ага))
Как я понял если допустим сделать flush вот так, то весь файл будет доступен во время выполнения программы? а что будет если поступит новый файл?
Добавлено через 3 минуты и 41 секунду скомпилировал ![]() вообще не изменилось ничего |
|||
|
||||
maydjin |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Как я считаю, flush() нужно вызывать перед простоем в программе а не перед закрытием файла. При этом, пока файл открытый на запись не закрыт, он скорее всего не будет доступен для открытия в каких либо режимах, кроме readonly. Не проверял как flush работает в файловых потоках, но думаю именно так как заявленно в документации.
А то что файл на каком то этапе после одного из вызовов flush не будет валидным xml так это уже проблемма алгоритма записи, если это критично пиши сначала в какой нибудь буфер, а потом этот буфер пиши в файл. Кстати для чего использовать FileSystemWatcher(не знаю что такое но по названию догадываюсь не заметил что в 1 топике ссылка ![]()
Не совсем понял о чем ты ? Да и вообще не очень понятна суть задачи.
В чем проблемма ? Закрывай файл в другом месте. Да, и делать flush перед close бессмысленно по идее, т.к. close() вызывает flush(). Это сообщение отредактировал(а) maydjin - 9.9.2011, 00:04 |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Открывай файл, пиши в него и закрывай внутри Watcher::run(); (при каждой модификации)
Конечно придется где то накапливать уже найденные модификации и писать их в выходной xml файл заново при каждой новой модификации |
|||
|
||||
olegarh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
Просто изначально не подумал о такой проблеме, а теперь из-за особенностей кода не получится так просто закрыть файл в watcher , надо перестраивать структуру кода((
думал что этого можно избежать и есть какой то способ простой... ну раз его нет. что поделаешь. будем переделывать ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |