![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Andrey_P |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 22.12.2003 Где: Томск Репутация: нет Всего: нет |
2 приложения одновременно используют один и тот же файл.
1-ое приложение использует его для чтения, после этого делаю CloseFile. По двойному щелчку по файлу он открывается во втором приложении для редактирования, проблем нет - все нормально. Однако при попытке сохранить файл выскакивает I/O Error 32. В чем проблема? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Значит файл открыт, но не закрыт.
Или найди, где не закрывается, либо используй TFileStream |
|||
|
||||
| Andrey_P |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 22.12.2003 Где: Томск Репутация: нет Всего: нет |
Точно! Нашел, где не закрыл.
Еще вопрос по ходу дела... Теперь я в приложении №2 изменяю файл. При каждом изменении нужно в другом приложении отобразить эти изменения. Видимо, надо посылать сообщения другому приложению. Какие? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Или посылай через WM_USER.
Или, что для тебя будет проще, проверяй дату и время последнего сохранения файла. |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 5 Всего: 7 |
Вот! Я столкнулся с такой же проблемой. Видите какой геморой. Пишешь в файл потом проверяешь, читаешь, закрываешь.
А мудрецы говорят - все решается с помощью MailSlot-ов. Где бы их взять?... |
|||
|
||||
| Andrey_P |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 22.12.2003 Где: Томск Репутация: нет Всего: нет |
Мне было бы удобнее через WM_USER. Только не знаю, как передать параметр типа String в качестве параметра сообщения. Как это сделать?
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
А никак.
Если обе программы на одной машине, то передавай через файл, либо через сокеты работай. Через сокеты божно вообще всю информацию передать. А, если через WM_USER, то можешь передавать число, которое либо будет обозначать какую-то строку, либо указывать на файл. А файлы называй file1.dat, file2.dat и т.д. Смотря что ты хочешь передать. |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 5 Всего: 7 |
Ну-ну! Вы хот справедливости ради про ДДЕ вспомните.
|
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Можно еще много чего вспоминать - вариантов много. И DDE недавно вспоминалось.
Но человек работает через файлы. Добавлено @ 14:36 Что касается маилслотов, то вот пример из DRKB:
|
||||
|
|||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 5 Всего: 7 |
2Snowy: Я уже неделю ищу работающие примеры с майлслотом - этот пример не работает.
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
что именно не работает?
+ что GetLastError() возвращает? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Andrey_P |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 22.12.2003 Где: Томск Репутация: нет Всего: нет |
Snowy
А как указатель на файл передать в виде lParam или wParam. Ведь это же Pointer, а параметры вроде как Integer. Или я не прав? Не хочется называть файлы file1.dat и т.п. в силу специфики программы. Свободы хочется в названиях файлов |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
Тогда никак
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Andrey_P |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 22.12.2003 Где: Томск Репутация: нет Всего: нет |
Hunter, а как бы ты поступил,
если надо редактировать файл в одном приложении и параллельно отслеживать, не запущено ли второе, использующее этот файл. И если оно таки запущено, то при нажатии "Сохранить" в первом, обновить информацию во втором. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
отслеживать наличие / отсутствие я предпочитаю с помощью мьютексов
а для передачи только имени можно в виртуальной памяти создать файл ( CreateFileMapping(NULL, ...) ) и записать в него имя для уведомления о необходимости перечитать можно использовать как сообщения так и события ( предпочтительный вариант ) ну и не забываем про сокеты ( тот же Diskeeper все взаимодействие на них построил ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
![]()
|
| Правила форума "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. |