Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 706

/ вопрос решён /

Привет всем!
Возникла проблемка, работаю с INI файлом, нужно в конец дописать определенные строки, которые беруться из richedit. есть глоб переменная F:TextFile. Файл береться из opendialog/ Возникает ошибка I\O 104.
Спасибо Вам заранее.

Приложение:
  1. var
  2. i:integer;
  3. begin
  4. if not (OpenDialog1.Execute) then exit;
  5. AssignFile (f,OpenDialog1.filename);
  6. {$I-}
  7.  
  8. {$I+};
  9.  
  10.  
  11. Eof(f);
  12. for i:=0 to RichEdit1.Lines.count do
  13. writeln (f,RichEdit1.Lines[i]);
  14. closefile(f);
  15. end;


WHILL Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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

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

WHILL (статус: Посетитель), 18 июня 2008, 20:24 [#3]:

Все, разобрался всем спасибо!

31 января 2011, 20:03: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 12 декабря 2017, 21:08
Выполнено за 0.04 сек.
Рейтинг@Mail.ru