Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> I/O Error 32 при редактировании файла 
:(
    Опции темы
Andrey_P
Дата 4.3.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.12.2003
Где: Томск

Репутация: нет
Всего: нет



2 приложения одновременно используют один и тот же файл.
1-ое приложение использует его для чтения, после этого делаю CloseFile.
По двойному щелчку по файлу он открывается во втором приложении для редактирования,
проблем нет - все нормально.
Однако при попытке сохранить файл выскакивает I/O Error 32. В чем проблема?
PM MAIL   Вверх
Snowy
Дата 4.3.2005, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Значит файл открыт, но не закрыт.
Или найди, где не закрывается, либо используй TFileStream
PM MAIL   Вверх
Andrey_P
Дата 4.3.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.12.2003
Где: Томск

Репутация: нет
Всего: нет



Точно! Нашел, где не закрыл.
Еще вопрос по ходу дела...
Теперь я в приложении №2 изменяю файл.
При каждом изменении нужно в другом приложении отобразить эти изменения.
Видимо, надо посылать сообщения другому приложению. Какие?
PM MAIL   Вверх
Snowy
Дата 4.3.2005, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Или посылай через WM_USER.
Или, что для тебя будет проще, проверяй дату и время последнего сохранения файла.
PM MAIL   Вверх
Bes
Дата 4.3.2005, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Вот! Я столкнулся с такой же проблемой. Видите какой геморой. Пишешь в файл потом проверяешь, читаешь, закрываешь.
А мудрецы говорят - все решается с помощью MailSlot-ов. Где бы их взять?...
PM MAIL   Вверх
Andrey_P
Дата 4.3.2005, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.12.2003
Где: Томск

Репутация: нет
Всего: нет



Мне было бы удобнее через WM_USER. Только не знаю, как передать параметр типа String в качестве параметра сообщения. Как это сделать?
PM MAIL   Вверх
Snowy
Дата 4.3.2005, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А никак.
Если обе программы на одной машине, то передавай через файл, либо через сокеты работай.
Через сокеты божно вообще всю информацию передать.
А, если через WM_USER, то можешь передавать число, которое либо будет обозначать какую-то строку, либо указывать на файл. А файлы называй file1.dat, file2.dat и т.д.
Смотря что ты хочешь передать.
PM MAIL   Вверх
Bes
Дата 4.3.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Ну-ну! Вы хот справедливости ради про ДДЕ вспомните.
PM MAIL   Вверх
Snowy
Дата 4.3.2005, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Можно еще много чего вспоминать - вариантов много. И DDE недавно вспоминалось.
Но человек работает через файлы.
Добавлено @ 14:36
Что касается маилслотов, то вот пример из DRKB:
Цитата

Пример работы с MailSlot
Код

procedure TForm1.Button1Click(Sender: TObject);
var
hSlot1      : THandle;
lpszSlotName: LPSTR;
begin
lpszSlotName := '\\\\.\\mailslot\\sample_mailslot';
hslot1 := CreateMailslot (lpszSlotName,
                          0,
                          MAILSLOT_WAIT_FOREVER,
                          nil);
//тут поидее должна быть обработка ошибки, если не удалось создать  
//Далее работаем  с ним, как с файлом т.е. WriteFile и т.д.
CloseHandle(hSlot1); //а кады закрываем за собой дескриптор,  то память чистится т.е. все, что мы туда поназаписали удаляется
end;


Автор ответа: Baa
Взято с Vingrad.ru http://forum.vingrad.ru

WinAPI->Windows->Процессы...->Пример работы с MailSlot
Тут Baa немного ошибся. Он написал открытие мэйлслота в C++ стиле:
lpszSlotName := '\\\\.\\mailslot\\sample_mailslot';
а надо так:
lpszSlotName := '\\.\mailslot\sample_mailslot';
т.е. вместо \\ надо просто \

Автор: p0s0l

PM MAIL   Вверх
Bes
Дата 4.3.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2Snowy: Я уже неделю ищу работающие примеры с майлслотом - этот пример не работает.
PM MAIL   Вверх
_hunter
Дата 4.3.2005, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



что именно не работает?
+ что GetLastError() возвращает?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Andrey_P
Дата 4.3.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.12.2003
Где: Томск

Репутация: нет
Всего: нет



Snowy
А как указатель на файл передать в виде lParam или wParam.
Ведь это же Pointer, а параметры вроде как Integer.
Или я не прав?
Не хочется называть файлы file1.dat и т.п. в силу специфики программы.
Свободы хочется в названиях файлов smile)
PM MAIL   Вверх
_hunter
Дата 4.3.2005, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



Тогда никак


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Andrey_P
Дата 4.3.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.12.2003
Где: Томск

Репутация: нет
Всего: нет



Hunter, а как бы ты поступил,
если надо редактировать файл в одном приложении и параллельно отслеживать, не запущено ли второе, использующее этот файл. И если оно таки запущено, то при нажатии "Сохранить" в первом, обновить информацию во втором.
PM MAIL   Вверх
_hunter
Дата 4.3.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



отслеживать наличие / отсутствие я предпочитаю с помощью мьютексов
а для передачи только имени можно в виртуальной памяти создать файл ( CreateFileMapping(NULL, ...) ) и записать в него имя
для уведомления о необходимости перечитать можно использовать как сообщения так и события ( предпочтительный вариант ) ну и не забываем про сокеты ( тот же Diskeeper все взаимодействие на них построил )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.