Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.06;
Скачать: CL | DM;

Вниз

Файл занят другим приложением   Найти похожие ветки 

 
ciborg   (2008-06-09 14:10) [0]

Я хочу открыть файл. При этом он может быть занят другим приложением, при открытии выдается ошибка. Как мне проверить занят ли он и если занят, то подождать определенное время, и если за это время он не освободится, то выдать ошибку?


 
Поросенок Винни-Пух ©   (2008-06-09 14:13) [1]

проверять бесполезно.


 
Игорь Шевченко ©   (2008-06-09 14:15) [2]

const
maxcnt = 360; //Ждем 6 минут максимум
var
fd: Integer;
ofs: _OFSTRUCT;
err: DWORD;
cnt: Integer;
begin
cnt := 0;
repeat
  Inc(cnt);
  FillChar(ofs, SizeOf(ofs), 0);
  ofs.cBytes := SizeOf(ofs);
  fd := OpenFile(PChar(FileName), ofs, OF_SHARE_EXCLUSIVE);
  err := GetLastError;
  if err <> ERROR_SHARING_VIOLATION then
    Break;
  Sleep(1000);
until cnt >= maxcnt;
CloseHandle(fd);
if err <> ERROR_SUCCESS then
  raise Exception.Create(SysErrorMessage(err))


 
Anatoly Podgoretsky ©   (2008-06-09 14:15) [3]

> ciborg  (09.06.2008 14:10:00)  [0]

> при открытии выдается ошибка

Вот это и обработать, только проверять не надо.


 
ciborg   (2008-06-09 14:16) [4]

почему?


 
Поросенок Винни-Пух ©   (2008-06-09 14:19) [5]

потому что после успешной проверки и перед открытием никто не гарантирует, что он снова не будет занят другим процессом


 
Поросенок Винни-Пух ©   (2008-06-09 14:25) [6]

- папа, дай денег на мороженное.
- дам, только сначала сходи в магазин, посмотри, что там оно есть.

(идешь зимой в гору за пять км в магазин, убеждаеешься, что мороженное есть, возвращаешься к папе)

- папа, мороженное есть!
- на, держи.

(идешь зимой в гору за пять км в магазин, убеждаеешься, что все мороженное раскупили, возвращаешься к папе усталый, но уже мудрый)


 
ciborg   (2008-06-09 15:08) [7]


> Поросенок Винни-Пух ©   (09.06.08 14:19) [5]
> потому что после успешной проверки и перед открытием никто
> не гарантирует, что он снова не будет занят другим процессом


Ну так может быть есть функция, которая проверяет занят файл или нет и после этого сразуже блокирует его, если свободен.


 
Palladin ©   (2008-06-09 15:10) [8]

конечно есть и ты ее узнаешь, если внимательно прочитаешь все буковки на этой страничке


 
Поросенок Винни-Пух ©   (2008-06-09 15:19) [9]

которая проверяет занят файл или нет и после этого сразуже блокирует его, если свободен.

читай снова про мороженное.
нету в природе такого "сразужеблокирует".
после проверки надо снова "зимой в гору за пять километров ...."


 
Anatoly Podgoretsky ©   (2008-06-09 15:20) [10]

> Palladin  (09.06.2008 15:10:08)  [8]

Есть и тебе даже привели готовый код.


 
Поросенок Винни-Пух ©   (2008-06-09 15:22) [11]

он щас тот кусок скопирует, оформит в функцию и будет думать, что поймал судьбу за что-то.


 
Тын-Дын ©   (2008-06-09 15:27) [12]


> Поросенок Винни-Пух ©   (09.06.08 15:22) [11]
> он щас тот кусок скопирует, оформит в функцию и будет думать,
>  что поймал судьбу за что-то.


Угу, а некоторые будут комментировать то, чего нет.


 
Поросенок Винни-Пух ©   (2008-06-09 15:41) [13]

Тагда уж что-то типа такого

const
maxcnt = 360; //Ждем 6 минут максимум

type TMyCallBack = procedure (F : File);

function CheckFileExclusive(ACallback : TMyCallback) : boolean
var
fd: Integer;
ofs: _OFSTRUCT;
err: DWORD;
cnt: Integer;
begin
result := False;
cnt := 0;
repeat
 Inc(cnt);
 FillChar(ofs, SizeOf(ofs), 0);
 ofs.cBytes := SizeOf(ofs);
 fd := OpenFile(PChar(FileName), ofs, OF_SHARE_EXCLUSIVE);
 err := GetLastError;
 if err <> ERROR_SHARING_VIOLATION then
   begin
    Result := True;
    Break;
   end;
 Sleep(1000);
until cnt >= maxcnt;

if Result and Assigned(ACallback) then ACallback(fd);

CloseHandle(fd);
if err <> ERROR_SUCCESS then
 raise Exception.Create(SysErrorMessage(err))
end;


 
ciborg   (2008-06-09 15:49) [14]

круто


 
Игорь Шевченко ©   (2008-06-09 15:49) [15]

А звчем вообще открывать файлы, занятые другими приложениями ?


 
ciborg   (2008-06-09 17:14) [16]


> Игорь Шевченко ©   (09.06.08 15:49) [15]
> А звчем вообще открывать файлы, занятые другими приложениями
> ?


Как зачем? Чтобы получить данные из этих файлов.


 
Игорь Шевченко ©   (2008-06-09 17:19) [17]


> Как зачем? Чтобы получить данные из этих файлов


Зачем нужны данные из файлов, открытых другими приложениями ? Это нонсенс


 
Тын-Дын ©   (2008-06-09 20:14) [18]


> Игорь Шевченко ©   (09.06.08 17:19) [17]
> > Как зачем? Чтобы получить данные из этих файловЗачем нужны
> данные из файлов, открытых другими приложениями ? Это нонсенс


Например, просмотр протокола другой программы в real-time...


 
Игорь Шевченко ©   (2008-06-09 20:52) [19]


> Например, просмотр протокола другой программы в real-time.
> ..


Это сильно зависит от того, как этот протокол пишется и в общем случае задача выглядит бредово, потому что протокол с незакрытием файла после записи или без сброса буферов пуст, как бутылка пива, стоящая слева от меня.

Почему в линуксе такое странное расположение знаков препинания по умолчанию...


 
tesseract ©   (2008-06-09 21:04) [20]


> Например, просмотр протокола другой программы в real-time.
> ..


А другая программа даёт тебе на это право ? Может она эксклюзивно для себя логи держит ? Или такой же горе-программер этой софтины про FILE_SHARE_READ не слышал.


 
Тын-Дын ©   (2008-06-09 21:14) [21]


> tesseract ©   (09.06.08 21:04) [20]
> > Например, просмотр протокола другой программы в real-time.
> > ..А другая программа даёт тебе на это право ? Может она
> эксклюзивно для себя логи держит ?


Может быть. И что?


> Или такой же горе-программер этой софтины про FILE_SHARE_READ
> не слышал.


Может быть такой же горе-читатель не понимает, о чем разговор? Или не читал ветку?
Тогда не след соваться в разговор.

PS.
Ответ был на [17]
Если решишь прочитать ветку, то промотни до этого поста.


 
Игорь Шевченко ©   (2008-06-09 21:18) [22]


> Или не читал ветку?
> Тогда не след соваться в разговор.


Тут кто-то цитировал правила конференции о том, что нефигово бы вежливыми быть.


 
Тын-Дын ©   (2008-06-09 21:23) [23]


> Тут кто-то цитировал правила конференции о том, что нефигово
> бы вежливыми быть.


А посмотри в предыдущем посте про горе-программера?


 
Anatoly Podgoretsky ©   (2008-06-09 22:06) [24]

Пусть автор поговорит, вы то зачем ругаетесь?



Страницы: 1 вся ветка

Текущий архив: 2008.07.06;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
15-1211727630
TIF
2008-05-25 19:00
2008.07.06
Получить все возможные комбинации символов :(


2-1212741153
VovKul
2008-06-06 12:32
2008.07.06
Разкладка клавиатуры


2-1213002154
yury
2008-06-09 13:02
2008.07.06
io error 103 при компиляции


2-1212753119
Инна
2008-06-06 15:51
2008.07.06
отображение в РичЕдите хтмл-страницы


2-1212427460
WebSQLNeederr
2008-06-02 21:24
2008.07.06
Помогите с алгоритмом