Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизГлобальные проблемы в работе с файлами в Дельфи Найти похожие ветки
← →
DeScriptor (2003-09-12 15:40) [0]Дорогие мастера!
Я уже умучался при работе с файлами в Дельфи! Что-то я не так понимаю, или он не так понимает, но эффект один - почти что любые попытки открытия/закрытия/чтения/записи типизирофанных и нетипизированных файлов заканчивается каким-нибудь I/O error! Я, вроде бы, делаю все строго в соответствии с книжкой, справкой и т.д. Вот пример:
var ListFile: textfile;
...
AssignFile(ListFile,ListFileName);
{$I-}
Reset(ListFile);
{$I+}
if IOResult <> 0 then Rewrite(ListFile);
...
writeln(ListFile,NamesList[i]);
Вроде бы, все в порядке, но нет! На последней строке вылетает I/O error 103! Спрашивается, КАК это файл не открыт, если он у меня на винте появляется, да и команды reset/rewrite выполняются 100%?! И вот подобные фигни все время происходят - то это не так, то - то не так... Например, команда rewrite у меня очень часто выдает какой-нибудь error, чаще 103. Причем, я ведь очень тщательно выверяю ошибки и т.д!
Я пребываю в полной расстеряности... ЧЕГО я делаю не так?..
Помогите, плз, кто может, а то у меня совсем тута горе!..
← →
Verg (2003-09-12 16:08) [1]Да не надо мудрить с {$I+-}
Используйте try except end при {$I+} и все;
try
reset(ListFile);
except
rewrite(ListFile); // Скорее всего(!!) файла нет
end;
....
или
if FileExists(ListFileName) then reset(ListFile) else rewrite(ListFile);
← →
Sandman25 (2003-09-12 16:11) [2]Удостовертесь, что есть нужный доступ (чтение, запись) к каталогу с файлом.
← →
DeScriptor (2003-09-12 16:32) [3]Доступ-то есть... Конструкция try..except почему-то в упор не хочет работать: мне все также радостно сообщают, что какой-нибудь i/o error произошел. А с конструкцией if FileExists(ListFileName) then reset(ListFile) else rewrite(ListFile); вообще ничего не происходит - размер файла какой-то загадочный, в нем сплошные нули и читается он до бесконечности - EOF вообще не выдает true... 8( Просто, глюки какие-то
← →
Mikhail V (2003-09-12 16:34) [4]Reset + F1
← →
Verg (2003-09-12 16:39) [5]1. Вам надо показать нам свой код как можно в болшем объеме.
2. Вам нужно проверить свой диск системными утилитам на предмет ошибок.
← →
Anatoly Podgoretsky (2003-09-12 16:44) [6]Зачем лишнее, если Reset отработает без ошибки, то тогда 100% получим ошибку на writeln(ListFile,NamesList[i]);
Ну конечно остается незвестная величина, скрытая под ...
А использовать Reset для определения наличия файла глупо.
← →
zaporshivets (2003-09-12 17:00) [7]Выруби Stop On Delphi Exceptions и не будет вылетать
← →
DT (2003-09-12 17:02) [8]Попробуйте
AssignFile(f, "my.txt");
if FileExists("my.txt") then
Append(f) // Открыть существ.текст. файл на добавление
else
Rewrite(f);
writeln(f, "123");
CloseFile(f);
← →
zaporshivets (2003-09-12 17:11) [9]Вообще порабы отвыкать от пережитков прошлого типа Assign и Reset. Зачем брат Borland придумал вам потоки
try
with TFileStream.Create("d:\test") do
begin
Write(i, sizeof(integer));
Free;
end;
except
...
end;
Разве менее наглядно?
← →
Verg (2003-09-12 17:29) [10]
> zaporshivets (12.09.03 17:11) [9]
Может чел не хочет classes подключать к проекту консольной программульки, маленьким размером которой он так сильно гордится :))
← →
pasha_golub (2003-09-12 18:02) [11]А что стало модным делать по 5 постов одного и того же вопроса?
← →
panov (2003-09-12 18:30) [12]clickmaker © (12.09.03 15:47)
Ну пользуйся апишными функциями: CreateFile, WriteFile...
--------------------------------------------------------------------------------
Юрий Зотов © (12.09.03 15:47)
Если собираетесь файл ЧИТАТЬ - вызывайте Reset, если ПИСАТЬ - вызывайте Rewrite. Но никогда не вызывайте то и другое вместе для одной и той же файловой переменной.
См. также Append.
--------------------------------------------------------------------------------
AGGRESSOR © (12.09.03 15:48)
If FileExists(FileName) then
reset(listfile)
else
rewrite (listfile);
...
closefile(listfile);
Должно работать.
--------------------------------------------------------------------------------
KDS © (12.09.03 17:46)
F1 "FileMode variable"
--------------------------------------------------------------------------------
pasha_golub © (12.09.03 18:00)
Не ребята я знаю в чем проблема :-)
Цикл наверное выглядит вот так
for i:=0 to NameList.count do
writeln(ListFile,NamesList[i]); ?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c