Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Внизкак узнать что файл не открыт другим процесом Найти похожие ветки
← →
ali_t (2004-12-03 00:00) [0]Здравствуйте программеры
у меня такой вопрос: программа по таймеру сканирует каталог
на наличие новых файлов которые туда закидывает FTP сервер и если файл
найден обработать его, как узнать что файл в каталог записан полностью ?
как вариант пытался сделать так
var
sr:TSearchRec;
begin
if FindFirst(Edit1.Text+"\"+Edit2.Text,not faReadOnly,sr)=0
then
begin
ListBox1.Items.Add(sr.Name);
while FindNext(sr)=0 do
ListBox1.Items.Add(sr.Name);
end;
FindClose(sr);
но faReadOnly не работает в win2000 , а также в listBox первой строкой записывается
.
.. второй строкой ?
вопрос как можно узнать что файл уже записан или загружен полностью,
какие атрибуты должны у него быть ?
← →
GuAV © (2004-12-03 00:06) [1]Открой его требуя доступ на всё. процесс создающий файлы должен ограничивать доступ к файлу, т.е. если файл занят, то не откроется.
← →
GuAV © (2004-12-03 00:07) [2]
> должен
хотя вообще-то никто никому ничего не должен :)
← →
Юрий Зотов © (2004-12-03 00:18) [3]IMHO, не требуя доступ на все, а ЗАПРЕЩАЯ ДРУГИМ доступ на все.
← →
ali_t (2004-12-03 01:23) [4]а пример ?
← →
GuAV © (2004-12-03 01:44) [5]
function IsFileOpenBySomeOtherProgram(FileName: string): Boolean;
var h: THandle;
begin
h := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil,
OPEN_EXISTING, 0, 0);
if h = INVALID_HANDLE_VALUE then
begin
if GetLastError <> ERROR_SHARING_VIOLATION then
RaiseLastWin32Error;
Result := True;
end
else
begin
CloseHandle(h);
Result := False;
end;
end;
ps: My IMHO, very-very H :)
← →
ali_t (2004-12-03 09:18) [6]вот так вроде работает
за ответы спасибо
function E9FileStatus(const Origin: string): boolean;
var
F: TFileStream;
begin
{
Значение Описание
fmCreate Созда?т файл с данным именем. Если файл существует, то открыть его в
режиме записи.
fmOpenRead Открыть файл только для чтения.
fmOpenWrite Открыть файл только на запись. При этом запись в файл заменит вс? его
содержимое.
fmOpenReadWrite Открыть файл скорее для изменения содержимого чем для замены его.
Режим доступа должен иметь одно из следующих значений:
Значение Описание
fmShareCompat Доступ к файлу совместим с FCB.
fmShareExclusive Другое приложение не может открыть файл для различных целей.
fmShareDenyWrite Другое приложение может открыть файл для чтения, но не для записи.
fmShareDenyRead Другое приложение может открыть файл для записи, но не для чтения.
fmShareDenyNone Разрешить другим файлам делать с файлом и чтени и запись.
Если файл невозможно открыть, то Create сгенерирует исключение.
Возвращает true если файл не заблокирован
}
try
// F := TFileStream.Create(Origin, fmOpenReadWrite or fmShareExclusive); нашел так но правилине наверно NextLine alidelphi
F := TFileStream.Create(Origin,fmShareExclusive);
try
Result := true;
finally
F.Free;
end;
except
Result := false;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
if E9FileStatus(OpenDialog1.FileName)=False then
ShowMessage("File in Use")
else
ShowMessage("NOT in Use");
end;
← →
Reindeer Moss Eater © (2004-12-03 09:24) [7]как узнать что файл в каталог записан полностью ?
То, что в какой-то момент файл в папке FTP сервера никем не занят и позволяет себя открыть монопольно, еще не говорит о том, что файл закачан фтп клиентом полностью.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.073 c