| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Если хочешь писать пиши:
|
| Автор: Vit 14.12.2004, 18:01 |
| f - какого типа? |
| Автор: Zero 15.12.2004, 02:00 | ||
| Собственно по ошибкам в/в, можно исп. дерективы компилятора {$I-} и {$I+} Добавлено @ 02:05
Имхо, тип здесь не играет особой роли... |
| Автор: Vit 15.12.2004, 03:06 | ||
Считаешь что мне делать нечего? |
| Автор: Vit 15.12.2004, 03:24 | ||
| Ошибка в общем-то проста и очевидна, я не зря про тип спрашивал, не совсем был уверен, хотя и догадывался откуда ноги растут, сейчас добрался до Дельфи проверил... Вот код:
Если этот код запустить, и файл '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 большое но насчет очевидности я к примеру не знал этого .... хотя стаж еше с TP4 еще раз большое спасибо |
| Автор: Vit 16.12.2004, 14:13 | ||
|
| Автор: devmstr 16.12.2004, 19:47 |
| Vit Приятно, когда тебя окружают такие проффесионалы! |
| Автор: Zero 17.12.2004, 23:34 | ||
Извени Vit, нехотел тебя обидеть, до меня и до самого сразу недошло что от типа многое зависит, покрайней мере в данном случае... Просто мне обычно когда требется избавится от ошибок в/выв, то на ум всегда первое что приходит ─ отключение на их проверку, а дальше что-нибудь ещё предумывать приходится... Ещё раз, извени... |
| Автор: Vit 19.12.2004, 05:00 | ||
|
| Автор: кварк 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. Очень уж они старые. Хотя, не исключено, что их переписали "на новый лад". |