Главная страница
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
1-1102413295
БареллО
2004-12-07 12:54
2004.12.19
Совместимость разных версий Delphi


14-1101696577
Думкин
2004-11-29 05:49
2004.12.19
С днем рождения! 29 ноября


4-1099648008
The Scorpion
2004-11-05 12:46
2004.12.19
Вызов API функций в чужом процессе


3-1101122826
a3a3ello
2004-11-22 14:27
2004.12.19
Хранимые процедуры в Interbase


4-1099471291
Фагот
2004-11-03 11:41
2004.12.19
Автозапуск