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

Вниз

Почему программа не может с первого раза открыть файл?   Найти похожие ветки 

 
Chaos ©   (2003-06-03 17:22) [0]

Всем привет. Если кто знает, объясните мне почему
программа не может с первого раза открыть/перезаписать
файл.Привожу два исходных кода:
1. Тут не открывает
(файл существует, не только для чтения)

if od1.Execute then
begin
assignfile(FParams,OD1.FileName);
{$i-}
reset(FParams);
if IOResult=0 then
begin
read(FParams,PS);
closefile(FParams);
...
end
else Application.MessageBox("Не могу открыть файл","Error");
{$i+}

end;
2.Тут открывает, т.е. проблема решена, но как???
я не пойму.объясните кто может и кому не лень :)
добился лишь экспериментальным путем, попробовал
открыть два раза подряд

if od1.Execute then
begin
assignfile(FParams,OD1.FileName);
{$i-}
reset(FParams);
if IOResult<>0 then reset(FParams);
if IOResult=0 then
begin
read(FParams,PS);
closefile(FParams);
...
end
else Application.MessageBox("Не могу открыть файл","Error");
{$i+}
end;


 
Chaos ©   (2003-06-03 18:04) [1]

ну напишите хоть кто-нибудь
наверняка кто-то же сталкивался с таким-же!!!


 
Serginio   (2003-06-03 18:10) [2]

Когда я вижу такой код у меня такая ностальгия проступает по древним временам Turbo Pascal. А чем TFileStream тебе не нравится???


 
Andrews ©   (2003-06-03 18:16) [3]

В режиме отладки посмотри что происходит...


 
Song ©   (2003-06-03 18:46) [4]

Посмотри чему равен IOResult. Второй - неправильный. Reset может вообще не исполнится.


 
Chaos ©   (2003-06-04 09:05) [5]

>Song
IOResult=183
Второй не исполнится если файла нет или он уже открыт
Но второй вариант работает, и я не пойму почему не работает первый
>Andrews
Смотрел...а на что там собственно смотреть? Assign сработал, Reset - ошибка 183
>Serginio
Ностальгия, говоришь..Если остались пережитки паскаля, значит кто-то ими пользуется..Почему бы не я? Лучше бы дельное что-то сказал
Всем кто ответил-спасибо


 
Morfein ©   (2003-06-04 11:50) [6]

>Chaos
>Ностальгия, говоришь..Если остались пережитки паскаля, значит
>кто-то ими пользуется..Почему бы не я?
>Лучше бы дельное что-то сказал

Чем пользуешься, то и получаешь. Смотри http://delphimaster.net/view/1-1054631182/, пост Morfein (03.06.03 19:04)


 
Sandman25 ©   (2003-06-04 11:50) [7]

Я посмотрел исходный текст _ResetFile в System.pas, но там много ассемблера, а я в нем не спец. Единственное мое предположение - что первый Reset как-то умудряется изменить переменную FileMode из 2 в 0 и поэтому второй Reset проходит. Установите FileMode сразу в 0.


 
Serginio   (2003-06-04 12:38) [8]

>>Ностальгия, говоришь..Если остались пережитки паскаля, значит >>кто-то ими пользуется..Почему бы не я? Лучше бы дельное что-то >>сказал
Так я дельное тебе и говорю. Так как специально для работы с файлами существует CLX класс TFileStream (Если конечно нет желания возится с API) и соответсвено хренова туча режимов открытия файлов. А то, что ВЫ не желаете обучаться и хотитие вылезти на каких то древних подходах не дает ВАМ профессионального развития.


 
SVM (Perm)   (2003-06-04 12:43) [9]

IOResult проверь перед первым Reset.


 
NickBat ©   (2003-06-04 12:59) [10]

Если файл существует его открываем через Reset
Если файла нет, открываем через Rewrite

И никаких ошибок.



Страницы: 1 вся ветка

Текущий архив: 2003.06.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
14-50473
OMen
2003-05-28 16:15
2003.06.16
Следует ли покупать Delphi7???


1-50294
asusfi
2003-06-03 11:25
2003.06.16
Динамический массив, запись, файл


1-50277
JS
2003-06-04 11:53
2003.06.16
Размер структуры


1-50389
thely
2003-06-04 13:53
2003.06.16
Установка ReadOnly всех компонент в true?


14-50477
Alekss S.
2003-05-28 16:51
2003.06.16
DBD, запуск с параметрами