Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1101557346
gn
2004-11-27 15:09
2004.12.19
Китайское правительство ограничит использование заграничного ПО


3-1100861281
MORA
2004-11-19 13:48
2004.12.19
Транзакции


14-1101843293
saNat
2004-11-30 22:34
2004.12.19
Потоки


4-1099405772
DSKalugin
2004-11-02 17:29
2004.12.19
Как изменить частоту видеоадаптера?


3-1100110366
ser_ega
2004-11-10 21:12
2004.12.19
Много строк в одной записи!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский