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

Исправление Ошибки 105 при Записи TStringList в Delphi 2010

Delphi , Интернет и Сети , Браузер

Исправление ошибки 105 при записи TStringList в Delphi 2010

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

Описание проблемы

Разработчик столкнулся с ошибкой 105 при попытке записи данных из TStringList в файл. Ошибка возникает в момент выполнения операции WriteLn. Это происходит из-за того, что функция WriteLn не получает файл, в который необходимо записать данные, что приводит к попытке записи в стандартный вывод (консоль), который в данном случае недоступен.

Оригинальный код

Вот пример кода, который приводит к ошибке 105:

procedure TForm1.Panel23Click(Sender: TObject);
var
  contents: TStringList;
  i: integer;
  filestream: TFileStream;
begin
  // Загрузка данных в TStringList
  contents := TStringList.Create;
  filestream := TFileStream.Create((GetAppData + '\RFA\fhpre.ini'), fmShareDenyNone);
  Contents.LoadFromStream(filestream);
  filestream.Destroy();

  // Поиск соответствующего пресета
  i := 0;
  if ComboBox4.Text <> Contents[i] then
    begin
      Repeat
        i := i + 1;
      Until ComboBox4.Text = Contents[i];
    end;

  contents.Delete(i); // Удаление названия пресета
  contents.Delete(i); // Удаление строки с кодом пресета

  // Запись TStringList обратно в файл
  AssignFile(fil, (GetAppData + '\RFA\fhpre.ini'));
  ReWrite(fil);
  for i := 0 to Contents.Count - 1 do
    WriteLn(Contents[i]); // Ошибка 105 здесь
  CloseFile(fil);
  Contents.Free;
end;

Исправление ошибки

Чтобы исправить ошибку 105, необходимо передать в функцию WriteLn файл, в который нужно записать данные из TStringList. Исправленный код будет выглядеть следующим образом:

// Запись TStringList обратно в файл
AssignFile(fil, (GetAppData + '\RFA\fhpre.ini'));
ReWrite(fil);
for i := 0 to Contents.Count - 1 do
  WriteLn(fil, Contents[i]); // Теперь указываем файл для записи
CloseFile(fil);

Также стоит отметить, что начиная с Delphi 2009, функции Read/WriteLn не поддерживают Unicode, поэтому для работы с Unicode-текстами следует использовать другие методы.

Альтернативный подход

Вместо использования функций WriteLn и ReadLn для работы с файлами, рекомендуется использовать методы LoadFromFile и SaveToFile класса TStringList. Это упростит код и сделает его более надежным. Пример использования этих методов:

// Загрузка данных в TStringList
contents := TStringList.Create;
contents.LoadFromFile((GetAppData + '\RFA\fhpre.ini'));

// ... (код по удалению строк из TStringList)

// Сохранение измененных данных в файл
contents.SaveToFile((GetAppData + '\RFA\fhpre.ini'));
contents.Free;

Также стоит рассмотреть использование класса TIniFile для работы с файлами в формате INI, что может упростить управление конфигурационными данными.

Заключение

Исправление ошибки 105 заключается в правильной передаче файла в функцию WriteLn. Для удобства и безопасности использования рекомендуется применять методы LoadFromFile и SaveToFile класса TStringList. В случае работы с INI-файлами стоит рассмотреть использование класса TIniFile.

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

Разработчик в Delphi 2010 столкнулся с ошибкой 105 при попытке записи данных из TStringList в файл из-за неправильного использования функции WriteLn, которая не получает файл для записи.


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

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




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


:: Главная :: Браузер ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:26:41/0.0054020881652832/1