Текущий архив: 2004.03.14;
Скачать: CL | DM;
ВнизПаралельная работа с файлами Найти похожие ветки
← →
snake1977 (2004-03-02 08:43) [0]Здравствйте!! подскажите, как мне решить такую вот проблемку. Одна программа формирует файл и записывает его в определенный каталог. Другая сканирует каталог и при нахождении там файла начинает его обрабатывать. проблема в том что она начинает его обрабатывать когда другая программа еще не дописала его до конца :(. Как сделать чтобы вторая программа дождалась того момента , когда файл будет полностью сформирован первой программой?
← →
Dimka Maslov (2004-03-02 08:48) [1]1. Передать другой программе сообщение, что уже можно начинать обработку данных (тогда вторая прога может вообще ничего не сканировать).
2. Создавать временный файл в другом каталоге. Закончив запись переносить в тот каталог, за которым следит вторая прога.
← →
snake1977 (2004-03-02 08:52) [2]а как передать сообщение другой программе??
примерчик можно??
← →
Fay (2004-03-02 08:55) [3]Не давай доступ на чтение и запись. Тогда та прога просто не откроет файл.
← →
Dimka Maslov (2004-03-02 08:57) [4]Если ты пишешь обе проги сам, то проблем нет: определяешь handle главного окна (через FindWindow например) и посылаешь ему сообщение через PostMessage (любое, какое сам захочешь). Если какая-либо из прог - чужая, то воспользуйся способом 2
← →
Кот Бегемот (2004-03-02 09:21) [5]Классическая семафорная задача :)
CreateSemaphore + WaitForSingleObject
← →
snake1977 (2004-03-02 09:21) [6]я пробую почти вторым способом, т.е. создаю файл по другим именем, отличным от того которое необходимо для второй программы, но когда я переименовываю файл, первая программа подвисает, а файл почемуто остаеться недописанным до конца, хотя я делаю flush.
← →
Verg (2004-03-02 09:27) [7]Можно использовать такой признак:
Размер найденного файла >0 и переименовывание его самого в себя заканчивается успешно.
← →
Fay (2004-03-02 09:28) [8]Блин! Как 2-я прога узнаёт, что пора (и есть чё) читать?
← →
Alex Konshin (2004-03-02 09:34) [9]Может ты скажешь, зачем ты пишешь в файл, если его тут же читает другая программа? Может тебе пайп лучше открыть?
← →
snake1977 (2004-03-02 09:38) [10]>>Fay © (02.03.04 09:28) [8]
Блин! Как 2-я прога узнаёт, что пора (и есть чё) читать?
как узнает, очень просто, через определенные интервалы времени сканирует каталог
← →
Verg (2004-03-02 09:42) [11]
> [9] Alex Konshin © (02.03.04 09:34)
Если ты имеешь ввиду именованные пайпы, то как ты объяснишь такую запись в MSDN
Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported.
← →
wisekaa (2004-03-02 09:46) [12]Есть простое тупое решение, дописывай в конец файла набор специальных символов. Прога которая читает файл, лезет в его конец и если там нет этих символов не обрабатывает его.
← →
Fay (2004-03-02 09:47) [13]Согласен. Тупое.
← →
panov (2004-03-02 10:48) [14]Простое решение:
Первая программа монопольно захватывает файл и пишет в него.
Вторая программа в цикле пытается его открыть на чтение, обрабатывая ошибку открытия.
А нужно это в случае, когда используется сетевой диск для передачи файлов.
← →
Romkin (2004-03-02 10:54) [15]Фи. FindFirstChangeNotification. И FindNext. НА каталог. Извещение пойдет, когда первая программа закроет файл, все грамотно и работает по Microsoft Network тоже
← →
snake1977 (2004-03-02 10:56) [16]все оказалось просче, надобыло работть с фалом через TFileStream
и создавать его fmCreate or fmShareExclusive
тогда вторая программа не имеет к нему никакого доступа, пока его не освободит первая
← →
Alex Konshin (2004-03-02 11:07) [17]Verg © (02.03.04 09:42) [11]
> [9] Alex Konshin © (02.03.04 09:34)
Если ты имеешь ввиду именованные пайпы, то как ты объяснишь такую запись в MSDN
Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported.
Я объясню так: Я не вижу упоминаний об используемой OS, потому и прошу более подробно описать задачу.
Потому как автор вопроса явно идет кривым путем, и весьма вероятно, что для его задачи есть более прямые решения.
← →
Verg (2004-03-02 11:18) [18]
> [15] Romkin © (02.03.04 10:54)
> Фи. FindFirstChangeNotification.
На сетевой каталог тоже сработает?
← →
Erik (2004-03-02 11:46) [19]Очень похоже на передачу информации между сетевыми програмами. Тогда лучше вобще немучатся взять пример от Indy для передачи по TCP. И вставить это в свою программу, будет работать надежнее и быстрее.
Страницы: 1 вся ветка
Текущий архив: 2004.03.14;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.014 c