Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.02 c
14-43761
Soi
2004-02-19 11:23
2004.03.14
Глючит OUTLOOK


1-43604
JIruaasgyy
2004-03-03 23:12
2004.03.14
Глюк при копированиии данных StringGrid в Excel?


3-43384
}|{yk
2004-02-18 13:59
2004.03.14
Процедуры, возвращающие набор значений в Оракле


4-43967
Grinder
2004-01-08 17:37
2004.03.14
Потоки на WinApi


3-43371
Денисыч
2004-02-15 01:06
2004.03.14
Какая технология доступа к данным лучше : BDE, ADO, dbExpress