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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2008, 21:43   #1
Kukkk
Форумчанин
 
Регистрация: 28.06.2007
Сообщений: 123
По умолчанию Открыть занятый файл.

Здравствуйте. Пишу программу, она должна следить за другой программой, которая время от времени вносит изменения в файл. Так вот столкнулся с одной проблемой,моя программа иногда пытается прочесть этот файл одновременно с той программой,что вызывает ошибку. Скажите пожалуйста, как прочесть уже занятый файл? Помню такое уже было на форуме, к сожалению не смог найти((
Kukkk вне форума Ответить с цитированием
Старый 24.03.2008, 08:44   #2
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

А по моему ни как. Я так свои проги и файлы защищаю и ни кто не может ни удалить, ни прочесть, тем более изминить.
Если только в проге, которая что-то пишет, закрывать файл время от времени, а во второй поставить обработчик:

Код:
try
<код, где возможна ошибка>
except
<если ошибка, то выполнется этот код>
end;
или использовать глобальные "переменные" (что б знать когда файл закрыт)

Код:
AddGlobalAtom// - добавить
GetGlobalAtom// - получить
DeleteGlobalAtom// - удалить
Функция GetGlobalAtom, по имени возвращает значение, если оно не "0", то значит такое имя сушествует (кажется).

Если не удалять атом, то он удалится после перезагрузки Винды.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 24.03.2008, 08:52   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Я думаю что можно, есть же программы к-рые могут удалить любой файл.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 24.03.2008, 09:01   #4
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Знаю такие, сам пробовал писать, главное
-1- найти прогу которая заняла файл и ласково попросить освободить его.
-2- просто считать этот файл по секторам диска.

По секторам читать умеет WinHex 12.x, я с её помощью SAM и SYSTEM файлы копировал, а они (как известно) тоже заняты системой.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 24.03.2008, 10:46   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Kukkk попробуйте, в момент, когда файл "занят" его содержимое можно увидеть, например, в Far manager по Alt-F3 (это встроенный просмотрщик).
Если отроется (думаю, вероятность этого 99%) то копайте в сторону измения FileMode, например так:
Код:
{$I-}
...
  assign(f1,paramstr(1));
  FileMode := 2;
  FName := ParamStr(1);
  reset(f1,1);
  IR := IOResult;
  if (IR=5) or (IR=163) then begin {open as SHAREBLE}
       WriteLn('ВНИМАНИЕ! Файл '+FName+' уже открыт другим пользователем.');
       WriteLn('Открываем файл в разделяемом режиме');
       FileMode := $C2;
       reset(f1,1);
       IR := IOResult
  end;
или копайте в сторону открытия файла через FileStream - ReadOnly + share mode... (читайте хелп по TFileStream.Create(...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.03.2008, 18:49   #6
Kukkk
Форумчанин
 
Регистрация: 28.06.2007
Сообщений: 123
По умолчанию

Спасибо! Щас буду пробовать)
Kukkk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скопировать занятый системный файл Alter Софт 6 31.12.2010 14:01
Как открыть файл в Excel globalhunter Общие вопросы Delphi 2 11.02.2008 01:30
Открыть файл dbClick-ом; Altera Помощь студентам 1 03.02.2008 15:40