Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > I\O Error 105


Автор: Штабс 14.12.2004, 16:20
Пипл срочно надо избавиться от этой ошибки

код вроде верный

try

AssignFile(f, FileName);
Reset(f);
except
Rewrite(f) ;
end;

Файл существует
но на любую попытку скинуть в него хоть что то мессадже

I\O Error 105

что не так?!

Автор: Bes 14.12.2004, 16:23
Подожди, т.е. теоретически возможна команда ReWrite без Assign-а?...
Это ли не ошибка?
Тем более если файл существует, то он откроется для чтения и понятно, что писать он в себя ничего не дает это ошибка два.

Автор: Штабс 14.12.2004, 16:46
Ой прошу пардону

AssignFile(f, FileName);
try
Reset(f);
except
Rewrite(f) ;
end;


Rewrite() отрабатывает

ругань конкретно идет на WriteLn(f,BlaBlaBlaBlaBlaBlaBla) при Reset(f) при пошаговой трассировке F8

напоминаю 105 ошибка это невозможность открыть файл для записи

AssignFile(f, FileName) OK
try OK
Reset(f); OK
except OK


структура отработала (т.е. существующий файл получил указатель и открыт для работы)

WriteLn(f,BlaBlaBlaBlaBlaBlaBla)

I\O Error 105

PS кстати аналогичное построение с $I- .... $I+ результат аналогичный



Автор: Bes 14.12.2004, 17:23
Че-то я не пойму:
что за конструкция, для чего она, или я чего-то не понимаю или она лишена логики. т.е. программа должна попробовать открыть файл для чтения и если не получилось то открыть для записи....? Странно как-то это.

try
Reset(f);
except
Rewrite(f) ;
end;

а почему отрабатывает Rewrite(f) ; т.е. для чтения он открытьсяне может?
а для записи может?.....

далее WriteLn(f,BlaBlaBlaBlaBlaBlaBla)
BlaBlaBlaBlaBlaBlaBla-это переменная или имеется ввиду WriteLn(f,'BlaBlaBlaBlaBlaBlaBla')?

Мне кажется но все-таки открывается для чтения и ругается при попытке записать что-либо в него, что вообщем-то естественно.

Автор: devmstr 14.12.2004, 17:46
Если хочешь писать пиши:
Код


AssignFile(f, FileName);

Rewrite(f);

write(f, '.....');
end;

[s]

Автор: Vit 14.12.2004, 18:01
f - какого типа?

Автор: Zero 15.12.2004, 02:00
Собственно по ошибкам в/в, можно исп. дерективы компилятора {$I-} и {$I+}
Добавлено @ 02:05
Цитата(Vit @ 14.12.2004, 18:01)
f - какого типа?

Имхо, тип здесь не играет особой роли...

Автор: Vit 15.12.2004, 03:06
Цитата(Zero @ 14.12.2004, 17:00)
Имхо, тип здесь не играет особой роли...



Считаешь что мне делать нечего?

Автор: Vit 15.12.2004, 03:24
Ошибка в общем-то проста и очевидна, я не зря про тип спрашивал, не совсем был уверен, хотя и догадывался откуда ноги растут, сейчас добрался до Дельфи проверил...

Вот код:

Код

 var f:TextFile;
begin
 AssignFile(f, 'c:\myfile.txt');
 Reset(f);
 write(f, 'sssss');
end;


Если этот код запустить, и файл 'c:\myfile.txt' существует, то получим эту самую ошибку 105. Почему? До потому что reset не открывает текстовые файлы на запись! только на чтение. Для записи текстовый файл должен быть открыт только rewrite или append. Вот и все проблемы!

Автор: Bes 15.12.2004, 07:27
Об чем и говорим на каждом собрании... :-)

Автор: Штабс 16.12.2004, 13:20
Только что вернулся от заказчика....
прошу извинить за долгое молчание

и так
тип файла
My_File:TextFile
т.е. текстовой

Директивы компилятора {$I} позволяют отлавливать Error Code
2: Файл не найден
3: Неверное имя
4: Слишком много открытых файлов
5: Файл не доступен
100: Достигнут конец файла (EOF)
101: диск переполне
106: ошибка ввода

105 относится к расширенной таблице ошибок

Если этот код запустить, и файл 'c:\myfile.txt' существует, то получим эту самую ошибку 105. Почему? До потому что reset не открывает текстовые файлы на запись! только на чтение. Для записи текстовый файл должен быть открыт только rewrite или append. Вот и все проблемы!

спасибо VIT
большое
но насчет очевидности
smile
я к примеру не знал этого ....
хотя стаж еше с TP4
еще раз большое спасибо





Автор: Vit 16.12.2004, 14:13
Цитата
но насчет очевидности

я к примеру не знал этого ....
хотя стаж еше с TP4



smile У меня опыт больше! Я с TP3 smile

Автор: devmstr 16.12.2004, 19:47
Vit
Приятно, когда тебя окружают такие проффесионалы! smile

Автор: Zero 17.12.2004, 23:34
Цитата(Vit @ 15.12.2004, 03:06)
Считаешь что мне делать нечего?

Извени Vit, нехотел тебя обидеть, до меня и до самого сразу недошло что от типа многое зависит, покрайней мере в данном случае...
Просто мне обычно когда требется избавится от ошибок в/выв, то на ум всегда первое что приходит ─ отключение на их проверку, а дальше что-нибудь ещё предумывать приходится...
Ещё раз, извени...

Автор: Vit 19.12.2004, 05:00
Цитата(Zero @ 17.12.2004, 14:34)
Ещё раз, извени...



smile Не страшно, сам такие ляпы делаю систематически smile

Автор: кварк 20.12.2004, 14:32
Извините, что вcтреваю, но зачем Assign?

tf: TextFile;

{$I-}
Reset(tf,'C:\temp.out');
{$I+}
If IOResult <> 0
then // Не открыт
else // Открыт

Rewrite - то же самое. Аррend'у почему-то нужен assign.


P.S. Всегда был в этом уверен, только что полез в справку и не нашел упоминаний об этом. Но работает еще с ТР: у меня даже в шаблон это забито :-)

P.P.S.
Кстати, try..except эти функции не ловятся. Только через IOResult. Очень уж они старые. Хотя, не исключено, что их переписали "на новый лад".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)