Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2011, 15:29   #1
AlexSoft777
Пользователь
 
Регистрация: 13.03.2010
Сообщений: 24
По умолчанию Как программно определить, что файл уже кем-то открыт?

Не могу решить задачу:
Открываю из моей программы некий текстовый файл.
Как мне сделать, чтобы я мог определить другой моей программой, что этот текстовый файл уже открыт?
AlexSoft777 вне форума Ответить с цитированием
Старый 05.07.2011, 15:51   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) а зачем Вам нужно это определять?!
А если у Вас просто прав на открытие файла нет?

2) по простому, например, можно использовать Try ... Except ... -
и на excption - действия при невозможности открытия файла


p.s. надеюсь, Вы знаете, что файл можно открывать в режимах
mShareExclusive, fmShareDenyWrite, fmShareDenyRead, fmShareDenyNone ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2011, 17:45   #3
AlexSoft777
Пользователь
 
Регистрация: 13.03.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. надеюсь, Вы знаете, что файл можно открывать в режимах
mShareExclusive, fmShareDenyWrite, fmShareDenyRead, fmShareDenyNone ?!
Не знаю. Подскажите где можно прочесть об этом?
А задача такая:

1) Открываю файл из первой программы.
2) Нужно, чтобы я не мог открыть этот же файл из другой программы. Проверить: уже открыть данный файл или нет?
AlexSoft777 вне форума Ответить с цитированием
Старый 05.07.2011, 18:13   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тогда вам надо открыть файл экслюзивном режиме(fmShareDenyExclusive) в первой программе.
и во второй программе при TFileStream.Create вылетит исключение.
инфа по этому легко гуглится.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.07.2011, 18:43   #5
AlexSoft777
Пользователь
 
Регистрация: 13.03.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
тогда вам надо открыть файл экслюзивном режиме(fmShareDenyExclusive) в первой программе.
и во второй программе при TFileStream.Create вылетит исключение.
инфа по этому легко гуглится.
Спасибо за подсказку! Буду разбираться.
AlexSoft777 вне форума Ответить с цитированием
Старый 05.07.2011, 18:51   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А вообще проверяйте права файла....
Если там нет записи, значит файл можно читать.
А если можно писать, поопробуйте открыть его и записать ''. Если пишет, значит можно.
Если нет, то нельзя.
Человек_Борща вне форума Ответить с цитированием
Старый 05.07.2011, 22:05   #7
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуй эту функцию:

Код:
//Проверить на занятость файла
function ApplicationUse(fName: string): boolean;
var
  HFileRes: HFILE;
begin
  HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0, nil,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  Result := (HFileRes = INVALID_HANDLE_VALUE);
  if not Result then CloseHandle(HFileRes);
end;
Пример использования
Код:
if ApplicationUse('Имя вашего файла') then 
showmessage('файл открыт')
else
showmessage('файл закрыт')

Последний раз редактировалось Aliens_wolfs; 05.07.2011 в 22:09.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли программно определить, что мышь двигает не человек, а бот? amakl Софт 4 11.01.2011 02:18
Как программно определить IP Дамир Общие вопросы .NET 2 10.10.2010 19:20
Как определить закрыт или открыт текстовый файл ZvEr_HaCkEr Общие вопросы Delphi 3 28.07.2010 17:33
Как узнать, открыт ли файл? #32 Microsoft Office Excel 5 30.10.2009 12:04
Запрет запуска программы на VBA в случае если Excel уже открыт kovalevskivf Microsoft Office Excel 4 01.09.2009 11:22