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

Устранение Ошибки I/O 102 при Работе с Файлами в Delphi

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

Вопрос, поднятый пользователем, связан с ошибкой I/O 102, возникающей при попытке записи данных в файл в среде Delphi. Ошибка связана с неправильным использованием функций ввода-вывода в Object Pascal. Давайте разберемся с причиной возникновения ошибки и найдем решение.

Пример кода, вызывающего ошибку I/O 102:

procedure TForm1.Button1Click(Sender: TObject);
var
  F: Array[1..20] of Text;  // 20 полей, по одному файлу для каждого
  FirstName, FName: string; // Путь к файлу, Поле
begin
  FirstName := ExtractFilePath(ParamStr(0)) + 'User\Identity\FirstName.txt'; // Путь к файлу
  FName := Edit1.Text;  // Данные для записи, полученные из Edit-контрола

  AssignFile(F[1], FirstName); // Ошибка в этом месте - использование массива переменных файла
  Rewrite(F[1], FirstName);   // Второй аргумент Rewrite не нужен и некорректен
  Writeln(F[1], FName);
  CloseFile(F[1]);
end;

Основные проблемы кода:

  1. Использование массива переменных файла F не является необходимым для данной задачи.
  2. Второй аргумент функции Rewrite не требуется, и его использование приводит к ошибке компиляции.
  3. Необходимо проверить доступ на запись в директорию, указанную в переменной FirstName.

Рекомендации по устранению ошибки:

  • Используйте одну переменную типа Text вместо массива.
  • Убедитесь, что директория, в которую будет записан файл, существует. Для ее создания используйте функцию ForceDirectories.
  • Удалите второй аргумент из функции Rewrite.

Исправленный код:

procedure TForm1.Button1Click(Sender: TObject);
var
  FileName, FName: string; // Путь к файлу и данные для записи
begin
  FileName := ExtractFilePath(ParamStr(0)) + 'User\Identity\FirstName.txt'; // Путь к файлу
  FName := Edit1.Text;  // Данные для записи

  ForceDirectories(ExtractFilePath(FileName)); // Создание директории, если она не существует
  AssignFile(File, FileName);
  Rewrite(File, 1); // 1 - это параметр, указывающий режим файла, второй аргумент не нужен
  Writeln(File, FName);
  CloseFile(File);
end;

Альтернативный подход с использованием TStringList:

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

uses
  SysUtils, Classes;

procedure TForm1.Button1Click(Sender: TObject);
var
  FileName: string;
  SL: TStringList;
begin
  FileName := ExtractFilePath(ParamStr(0)) + 'User\Identity\FirstName.txt';
  SL := TStringList.Create;
  SL.Add(Edit1.Text); // Добавление данных из Edit-контрола в список
  SL.SaveToFile(FileName);
  SL.Free;
end;

Заключение:

Ошибка I/O 102 в Delphi обычно возникает из-за неправильного использования функций ввода-вывода. В представленных примерах кода исправлены основные ошибки, и теперь программа должна корректно записывать данные в файл. В современных проектах рекомендуется использовать более современные подходы и классы, такие как TStringList, для упрощения работы с текстом и уменьшения вероятности возникновения ошибок.

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

Вопрос касается устранения ошибки ввода-вывода 102 при работе с файлами в среде разработки Delphi, связанной с неправильным использованием функций ввода-вывода в Object 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-20 22:55:54/0.0022459030151367/0