Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Определить, находится ли файл в использовании

Delphi , Файловая система , Файлы

Определить, находится ли файл в использовании

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function IsFileInUse(FileName: TFileName): Boolean;
 var
   HFileRes: HFILE;
 begin
   Result := False;
   if not FileExists(FileName) then Exit;
   HFileRes := CreateFile(PChar(FileName),
                          GENERIC_READ or GENERIC_WRITE,
                          0,
                          nil,
                          OPEN_EXISTING,
                          FILE_ATTRIBUTE_NORMAL,
                          0);
   Result := (HFileRes = INVALID_HANDLE_VALUE);
   if not Result then
     CloseHandle(HFileRes);
 end;


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if IsFileInUse('c:\Programs\delphi6\bin\delphi32.exe') then
     ShowMessage('File is in use.');
   else
     ShowMessage('File not in use.');
 end;

Перевод контента на русский язык:

Код Delphi defines функцию IsFileInUse, которая проверяет, является ли файл текущим в использовании другим процессом или приложением. Функция использует API Windows CreateFile для попытки открыть указанный файл. Если файл не может быть открыт потому что он уже используется, функция CreateFile возвращает недопустимое значение handle (INVALID_HANDLE_VALUE). Функция затем проверяет это условие и устанавливает свой результат в True, указывая, что файл используется.

Код также включает в себя процедуру Button1Click, которая вызывается при событии клика кнопки. Эта процедура вызывает функцию IsFileInUse с конкретным путем файла ('c:\Programs\delphi6\bin\delphi32.exe') и отображает сообщение об ошибке, указывая, является ли файл в использовании или нет.

Вот некоторые улучшения, которые можно сделать в этом коде:

  1. Обработка ошибок: Код не обрабатывает ошибки должным образом. Если возникает ошибка при вызове CreateFile, она должна быть поймана и обработана вместо просто выхода из функции.
  2. Обработка пути файла: Код предполагает конкретный путь файла, но в реальных приложениях обычно хочется позволить пользователю указать имя файла или просмотреть его. Вы можете использовать компонент OpenDialog для достижения этого.
  3. Организация кода: Функция IsFileInUse отвечает за обе проверки использования файла и закрытие handle, если это необходимо. Лучше было бы разделить эти ответственности между двумя разными функциями, одной из которых будет проверять доступность файла, а другой - закрывать handle.

Вот обновленная версия кода с улучшенной обработкой ошибок и организацией кода:

function IsFileInUse(FileName: TFileName): Boolean;
var
  HFileRes: HFILE;
begin
  Result := False;
  if not FileExists(FileName) then Exit;
  try
    HFileRes := CreateFile(PChar(FileName),
                           GENERIC_READ or GENERIC_WRITE,
                           0,
                           nil,
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL,
                           0);
    Result := (HFileRes = INVALID_HANDLE_VALUE);
  except
    on E: Exception do
      Result := True;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FilePath: string;
begin
  if OpenDialog1.Execute then
  begin
    FilePath := OpenDialog1.FileName;
    if IsFileInUse(FilePath) then
      ShowMessage('File is in use.')
    else
      ShowMessage('File not in use.');
  end;
end;

Замечание: в этом коде используется блок try-except, чтобы поймать любые исключения, raised функцией CreateFile, и установить результат в True, если исключение возникает. Таким образом, код может обрабатывать ошибки более надежно, чем раньше. Кроме того, я добавил компонент OpenDialog для позволения пользователю просмотреть файл вместо использования конкретного пути. Процедура Button1Click теперь использует этот компонент для получения выбранного пути файла и отображения соответствующего сообщения.

Определение функции IsFileInUse, которая проверяет, находится ли указанный файл в использовании.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:59:59/0.0056891441345215/1