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

Разрешение записи файлов на защищённые от записи устройства в Delphi и Pascal

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

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

Проблема

Пользователь столкнулся с проблемой, когда попытка записи файла на защищённое от записи устройство приводила к появлению системного сообщения об ошибке. Пример кода, который вызывает данную проблему:

{$I-}
Rewrite(myFile);
{$I+}
Result:= (IOResult = 0);

Решение

Использование функции _SetErrorMode()

Один из способов решения проблемы - использование функции Windows API _SetErrorMode(). Эта функция позволяет отключить отображение диалоговых окон с сообщениями об ошибках. Пример кода, который демонстрирует использование _SetErrorMode() для проверки возможности записи файла:

procedure TForm1.Button1Click(Sender: TObject);
var
  Str: TFileStream;
  OldMode: Cardinal;
begin
  OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    try
      Str := TFileStream.Create('z:\foo.txt', fmOpenReadWrite);
      try
        // Здесь может быть код записи файла
      finally
        Str.Free;
      end;
    except
      // Если произошла ошибка записи, здесь будет обработка исключения
      SetLastError(0); // Сброс последнего кода ошибки
      Result := False; // Возвращаем, что запись невозможна
    end;
  finally
    SetErrorMode(OldMode);
  end;
end;

Использование try/except

Другой способ - обернуть операцию записи в блок try/except, что позволит перехватить исключение, возникающее при попытке записи на защищённое устройство:

function CanWrite(drive: string): boolean;
var
    OldMode: Cardinal;
begin
    OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
    try
        with TStringList.Create do
            try
                SaveToFile(drive + ':\file.txt');
                result := true;
                try
                    DeleteFile(drive + ':\file.txt');
                except
                end;
            except
                result := false;
            end;
    finally
        SetErrorMode(OldMode);
    end;
end;

Использование внешних утилит

Также можно использовать внешние утилиты, такие как "Drive ready?", для проверки разрешений на запись. Однако это решение требует вызова внешней программы и анализа её результатов.

Пример использования проверки записи

Чтобы использовать функцию CanWrite, достаточно вызвать её с указанием пути к устройству:

if CanWrite('C:') = true then
begin
    ShowMessage('Можно писать');
end
else
begin
    ShowMessage('Писать нельзя');
end;

Заключение

Проверка разрешений на запись файлов на устройствах хранения является важной частью разработки надёжных и удобных в использовании приложений. Используя предложенные методы, разработчики могут обеспечить корректное поведение своих программ и предотвратить возникновение ошибок, связанных с защитой от записи устройств.

Создано по материалам из источника по ссылке.

Вопрос связан с решением проблемы записи файлов на защищённые от записи устройства в среде программирования Delphi и Pascal, включая проверку разрешений на запись без возникновения системных сообщений об ошибках.


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

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




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


:: Главная :: Диски ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 20:46:27/0.0032150745391846/0