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

Вниз

как узнать что файл не открыт другим процесом   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-1102255656
Andrick
2004-12-05 17:07
2004.12.19
Создание конструктора класса


1-1101969351
Frozzen
2004-12-02 09:35
2004.12.19
Алгоритмы защиты от свободного копированя


1-1102067876
Aleksandr.
2004-12-03 12:57
2004.12.19
Как получить доступ к FMemory TMemoryStream?


14-1101932119
Verg
2004-12-01 23:15
2004.12.19
А в чем сила?


3-1100439265
miwa
2004-11-14 16:34
2004.12.19
Не удается отфильтровать записи в связке Firebird1.0+IBX+EhLib.