Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.25;
Скачать: CL | DM;

Вниз

Глобальные проблемы в работе с файлами в Дельфи   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
1-82333
postx
2003-09-10 20:36
2003.09.25
Можно ли запустить программу из ресурса без сохранения на диск?


1-82213
avch
2003-09-12 09:59
2003.09.25
Программирование потоков


1-82306
Regul
2003-09-11 21:04
2003.09.25
Microsoft Equation


1-82203
DeScriptor
2003-09-08 01:44
2003.09.25
I/O error 998


6-82377
Flying Home
2003-07-29 14:15
2003.09.25
Серврное приложение