| 
| 
 | Вопрос # 1 706/ вопрос решён / | 
 |  Привет всем! Возникла проблемка, работаю с INI файлом, нужно в конец дописать определенные строки, которые беруться из richedit. есть глоб переменная F:TextFile. Файл береться из opendialog/ Возникает ошибка I\O 104.
 Спасибо Вам заранее.
 Приложение:Переключить в обычный режим vari:integer;begin if not (OpenDialog1.Execute) then exit;AssignFile (f,OpenDialog1.filename);{$I-} {$I+};  Eof(f);for i:=0 to RichEdit1.Lines.count dowriteln (f,RichEdit1.Lines[i]);closefile(f);end;
|  |   Вопрос задал: WHILL (статус: Посетитель)Вопрос отправлен: 18 июня 2008, 18:12
 Состояние вопроса: решён, ответов: 3.
 |  Ответ #1. Отвечает эксперт: Feniks Здравствуйте, WHILL!Если вы работаете с INI файлом, так используйте специальный для этого класс TIniFiles. Он прекрастно описан в хелпе и с ним легко разобраться. Простенький пример только что был в предыдущем вопросе.
 Для INI файла совсем безраницы в каком порядке там хранятся секции и в них переменные.
 Давайте больше конкретики и вам наверняка кто-нибудь даст более полный пример.
 Желаю удачи.
 
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 18 июня 2008, 18:33
 Оценка за ответ: 4
 |  Ответ #2. Отвечает эксперт: Мережников Андрей Здравствуйте, WHILL!Про Ini файлы Вам написал WHILL. Но думаю, что ошибка у Вас выскакивает из-за того, что в строке for i:=0 to RichEdit1.Lines.count, надо указать RichEdit1.Lines.Count-1.
 И еще - для чего Вы ставите вызов функции eof(f) перед циклом? При открытии файла процедурой append указатель и так ставится на конец файла. А функция eof() не передвигает указатель, а только определяет, находится ли указатель в конце файла.
 
|  | Ответ отправил: Мережников Андрей (статус: Абитуриент)Время отправки: 18 июня 2008, 18:54
 Оценка за ответ: 5
 |  Ответ #3. Отвечает эксперт: min@y™ Для справки: Ошибка I/O 104 - это "Файл не открыт для ввода."
 Предложу свой вариант работы с этим файлом как с текстовым, не задавая вопрос "зачем это надо для ini-файла".
 
 
 var
  i:integer;
  f: TextFile;
begin
  if not (OpenDialog1.Execute)
    then exit;
 
  AssignFile (f,OpenDialog1.filename);
  {$I-}
  if (FileExists(OpenDialog1.filename))
    then Append(f) // открыть для добавления
    else Rewrite(f); // открыть для записи
 
  for i:=0 to RichEdit1.Lines.count - 1 do
    writeln (f,RichEdit1.Lines[i]);
 
  closefile(f);
  {$I+};
 
  i:= IOResult();
  if (i <> 0)
    then ShowMessage(GetIOResultError(i, OpenDialog1.filename));
end;В коде есть вызов моей функции GetIOResultError(). Вот она:
 
 
 // Получение строки с ошибкой функции IOResult.
function GetIOResultError(const ErrorCode:Integer;const FileName:string=''):string;
var
 FN:string;
begin
 if FileName<>''
  then FN:=' '+FileName
  else FN:='';
 case ErrorCode of
  0   : Result:='';
  2   : Result:='Файл'+FN+' не найден.';
  3   : Result:='Неверное имя файла'+FN+'.';
  4   : Result:='Слишком много открытых файлов.';
  5   : Result:='Доступ к файлу'+FN+' закрыт.';
  100 : Result:='Достигнут конец файла'+FN+'.';
  101 : Result:='Диск переполнен.';
  102 : Result:='Файловая переменная не связана с физическим файлом'+FN+'.';
  103 : Result:='Попытка операции в/в над закрытым файлом'+FN+'.';
  104 : Result:='Файл'+FN+' не открыт для ввода.';
  105 : Result:='Файл'+FN+' не открыт для вывода.';
  106 : Result:='Ошибка ввода или неверный формат числа.';
  else  Result:='Ошибка ввода/вывода.';
 end;//case Error of
end; 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 19 июня 2008, 08:44
 Оценка за ответ: 5
 Комментарий к оценке: Ого! Спасибо огромное! |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 18 июня 2008, 20:24; участников в обсуждении: 2. 
|   | Мережников Андрей (статус: Абитуриент), 18 июня 2008, 18:56 [#1]:Извините, конечно же не WHILL отправил ответ самому себе, а Feniks отправил ответ WHILL |  
|   | WHILL (статус: Посетитель), 18 июня 2008, 19:52 [#2]:Если я ставлю TiniFiles то в функции AssignFile выскакивает ошибка... т.е. EoF не нужен? вот что я сейчс дописал : if not (OpenDialog1.Execute) then exit;
 AssignFile (f,OpenDialog1.filename);
 Append(f); // открыть для добавления
 rewrite (f);
 while Eof(f) do
 begin
 for i:=0 to RichEdit1.Lines.count do
 writeln (f,RichEdit1.Lines[i]);
 end;
 Flush(f);
 closefile(f);
 end;
 
 Однако он стирает содержимое, а мне нужно что бы он добавил.
 |  
|   | WHILL (статус: Посетитель), 18 июня 2008, 20:24 [#3]:Все, разобрался всем спасибо! |  31 января 2011, 20:03: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |