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

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

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

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

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

function IsFileInUse(const fName: TFileName): Boolean;
 var
   HFileRes: HFILE;
 begin
   Result := False;
   HFileRes := CreateFile(PChar(fName),
                          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 OpenDialog1.Execute then
     if IsFileInUse(Opendialog1.FileName) then
       ShowMessage('File is in use!');
 end;

Программный код на Delphi проверяет, является ли файл в использовании другим процессом или нет.

Функция IsFileInUse принимает имя файла в качестве входного параметра и возвращает булевое значение, указывающее, находится ли файл в использовании или нет.

Сначала функция создает handle к файлу с помощью функции CreateFile. Функция CreateFile пытается открыть указанный файл. Если файл уже открыт другим процессом, эта функция будет проваливаться и возвращать недопустимый handle.

Переменная Result изначально устанавливается в значение False. Затем она проверяет, равен ли возвращенный handle значению INVALID_HANDLE_VALUE, что означает, что файл не может быть открыт (т.е., он используется). Если это условие выполняется, переменная Result устанавливается в значение True.

Если файл не используется, функция закрывает handle с помощью функции CloseHandle. Если при закрытии handle возникает ошибка, она ничего не делает.

Код затем вызывается из обработчика события клика кнопки (Button1Click) на форме. Когда кнопка нажата, открывается диалоговое окно для выбора файла пользователем. После выбора файла, если файл используется (т.е., функция IsFileInUse возвращает True), будет отображаться сообщение об ошибке "Файл в использовании!".

Альтернативное решение:

Вместо использования функции CreateFile, можно использовать функцию GetFileAttributes для проверки, находится ли файл в использовании. Функция GetFileAttributes возвращает значение, указывающее, существует ли файл и доступен ли он к чтению, а также является ли он текущим образом используемым процессом.

Вот пример модифицированного кода:

function IsFileInUse(const fName: TFileName): Boolean;
var
  Attr: DWORD;
begin
  Result := False;
  Attr := GetFileAttributes(PChar(fName));
  if (Attr <> INVALID_FILE_ATTRIBUTES) and not Attr and FILE_ATTRIBUTE_READONLY then
    Result := True;
end;

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

В статье описывается функция на языке Delphi, которая определяет, занят ли файл в использовании, а также пример ее использования в приложении с помощью кнопки "Открыть".


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

Получайте свежие новости и обновления по 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 20:00:01/0.0036218166351318/0