Главная страница
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.023 c
4-1099669422
Meff
2004-11-05 18:43
2004.12.19
CreateWindow


14-1101909817
Koala
2004-12-01 17:03
2004.12.19
сервер доменов Win2003 Server


14-1101232615
OneFragLeft
2004-11-23 20:56
2004.12.19
Раздел порта.


14-1100470762
Homa_Programer
2004-11-15 01:19
2004.12.19
свой сайт


4-1099421634
Genocid
2004-11-02 21:53
2004.12.19
Вызов функций из Dll