Форум: "Начинающим";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];
ВнизФайл занят другим приложением Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.057 c