Главная страница
    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.48 MB
Время: 0.014 c
1-43567
Petrovich
2004-02-26 16:38
2004.03.14
Как отловить принудительное завершение своего приложения?


14-43798
PVOzerski
2004-02-17 17:28
2004.03.14
глюк в Netscape 4.8?


1-43619
ghg
2004-03-02 14:52
2004.03.14
закон перехода от одного цвета к другому


1-43620
JIruaasgyy
2004-03-02 13:42
2004.03.14
А какой функцией узнать число ли в текстовом поле?


4-43950
Mohamed
2004-01-07 00:12
2004.03.14
Pomogite c Stop Watch





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский