|
Вопрос # 1 706/ вопрос решён / |
|
Привет всем!
Возникла проблемка, работаю с INI файлом, нужно в конец дописать определенные строки, которые беруться из richedit. есть глоб переменная F:TextFile. Файл береться из opendialog/ Возникает ошибка I\O 104.
Спасибо Вам заранее.
Приложение: Переключить в обычный режим- var
- i:integer;
- begin
- if not (OpenDialog1.Execute) then exit;
- AssignFile (f,OpenDialog1.filename);
- {$I-}
-
- {$I+};
-
-
- Eof(f);
- for i:=0 to RichEdit1.Lines.count do
- writeln (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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|