Форум: "Основная";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
Вниз183 I/O Error Найти похожие ветки
← →
Evgeniy_K (2003-12-28 11:31) [0]Почему может возникать 183 I/O Error?
fLog: TextFile;
...
AssignFile(fLog, extractfilepath(paramstr(0)) + "file.log");
Rewrite(fLog);
← →
Ihor Osov'yak (2003-12-28 11:40) [1]Хм..
ShowMessage(SysErrorMessage(183));
Посмотри, что напишет, может какие-то соображения соображатся...
← →
ИМХО (2003-12-28 11:41) [2]Наверное, 103-я.
← →
Ihor Osov'yak (2003-12-28 11:44) [3]зы - SysErrorMessage - sysutils;
зы2 - Хотя при rewrite 183 ошибку получить - я не представляю, как это сделать.. немного больше код приведи, в частности как код ошибки получаешь..
← →
Anatoly Podgoretsky (2003-12-28 12:51) [4]Вероятно где то уже открыто
← →
dmk (2003-12-28 13:07) [5]MsWinErr по этому говорит следующее:
Err #183 - Невозможно создать файл так как он уже существует
← →
Anatoly Podgoretsky (2003-12-28 13:22) [6]dmk © (28.12.03 13:07) [5]
Существование файла для Rewrite (Rewrite для этого и предназначен) не является помехой, а вот если файл нельзя переписать по какой то либо причине является.
← →
shane54 (2003-12-28 13:25) [7]1) Права
2) Сетевой диск
3) Файл открыт какой-нить глупой программой а-ля Ворд?
← →
dmk (2003-12-28 14:17) [8]2 Anatoly Podgoretsky © (28.12.03 13:22) [6]
Не сомневаюсь :D
← →
Evgeniy_K (2003-12-29 13:15) [9]
procedure AddLog(str: String);
var
fLog: Text;
path: String;
begin
GetLastError;
path:= extractfilepath(paramstr(0)) + "error.log";
AssignFile(fLog, path);
if FileExists(path) then
Append(fLog)
else
Rewrite(fLog);
writeln(fLog, str);
CloseFile(fLog);
end;
...
try
//Код, в котором возникает ошибка
except
AddLog(logR);
end;
...
← →
Рамиль (2003-12-29 13:24) [10]
> CloseFile(fLog);
Это, что? после CloseFile писать пытаетесь?..
← →
kdy (2003-12-29 13:25) [11]> [7] shane54 © (28.12.03 13:25)
1) Права
есть
2) Сетевой диск
да. ну и что?
3) Файл открыт какой-нить глупой программой а-ля Ворд?
не открыт
Я тоже столкнулся с такой ошибкой. Причём ошибка есть только при первом обращении к файлу, начиная со второго - всё проходит нормально. А другие файлы после этого открываюстя нормально уже с первого раза (они могут и на других дисках лежать.)
Ещё один ньюансик - ошибка вылазит только у заказчика.
Пока я её успешно игнорирую, но разобраться было бы интересно.
← →
Рамиль (2003-12-29 13:27) [12]
> Рамиль © (29.12.03 13:24) [10]
Сорри, невнимательно посмотрел...
← →
Evgeniy_K (2003-12-29 15:38) [13]У меня при rewrite всегда I/O Error 183 (только в этом приложении). Больше нигде в коде этот файл не открывается и т.п.
← →
kdy (2003-12-29 15:46) [14]>[13] Evgeniy_K (29.12.03 15:38)
А у меня - на reset ругается.
AssignFile(f,flTXT);
Reset(F);
← →
alex_*** (2003-12-29 15:51) [15]может он неявно перед этим открывается/закрывается? У меня как-то было при многократном открытии/закрытии log файла rewrite"ом, вылетала ошибка доступа. Разбираться было некогда и пришлось log писать на функциях API.
← →
Evgeniy_K (2003-12-30 07:56) [16]100% нигде файл больше не используется, т.е. это его первое открытие/перезапись
← →
han_malign (2003-12-30 08:49) [17]183 - ошибка весьма интересная, во всяком случае если все операции ввода/выводы прошли успешно, и на голом месте вызывается GetLastError - возвращается именно эта ошибка...
Могу посоветовать только хрестоматийное:
{$I-}Rewrite(fLog); {$I+}
if(IOResult=0)then begin
...
CloseFile(fLog);
end;
← →
Evgeniy_K (2003-12-30 20:06) [18]Ошибка идет на rewrite. GetLastError это на всякий пожарный - чтоб проверить не порождается ли эта ошибка предыдущей, если таковая имеется.
← →
YuRock (2003-12-30 20:46) [19]Попробуй не
...
fLog: Text;
...
а
...
fLog: TextFile;
...
← →
Evgeniy_K (2004-01-01 10:07) [20]Не помогает, пробовал :-/
← →
CYBERWOLF (2004-01-02 02:20) [21]попробуй использовать вместо абсолютного пути относительный, ведь, как я понял, файл у тебя лежит в той же директории, что и екзешник:
вместо
...
path:= extractfilepath(paramstr(0)) + "error.log";
...
пиши
...
path:= "error.log";
...
можно еще потыкаться:
1. использовать Application.ExeName вместо ParamStr(0)
2. возможно не хватает слэша:
path:= extractfilepath(paramstr(0)) + "\error.log";
3. может лог-файл - read-only
4. попробуй глобальную переменную TextFile, открывая ее при запуске и закрывая при выходе
вообще, это странно. возможно, ошибка в другом месте кода.
← →
Evgeniy_K (2004-01-02 17:07) [22]Файл создается, но при этом возникает указанная ошибка. Файл остается пустым.
← →
Ihor Osov'yak (2004-01-02 20:19) [23]> Файл создается,
имхо, при rewrite ошибки не возникает
> Файл остается пустым
А после rewrite он и должен быть пустым.. Здесь уже без имхо.
напишите примерно такой фрагмент кода:
var err: integer;
AssignFile(fLog, extractfilepath(paramstr(0)) + "file.log");
Rewrite(fLog);
err := GetLastError;
if err <> 0 then
ShowMessage("control point one: " + SysErrorMessage(err));
и следите за сообщениями..
тогда точно будете уверенны возникает ли ошибка при rewrite
Зы. В особо клиничном случае загрузите filemon c www.sysinternals.com, настройте фильтр на имя своего файла и анализируйте все операции с файлом. FileMon среди прочего покажет какая операция завершилась с ошибкой. Вероятнее всего это будет не операция пересоздания файла.
Зы2. Чтобы исключить причины 1 и 2 упоминаемые в [7] - попытайтесь создать файл "ручками". Естественно, если ваше приложение не сервис (так как сервис может быть запущен от лица иной учетной записи, чем ваши "ручки").
на случай 7.3 - утилита с того же sysinternals - кажется называется handle, или handleview - показывает, какой процесс какие файлы держит открытыми..
Зы3. В конечном итоге обнаружите какую-то тривиальную причину, которая немного не в том "месте", где вы ищите..
← →
Evgeniy_K (2004-01-07 19:52) [24]Косяк я так и не нашел, но сделал [21] 4. Всем огромное спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c