Главная страница
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.022 c
9-50190
Yurchik
2003-01-03 17:18
2003.06.16
Шашки или шахматы


7-50532
nokk9
2003-04-11 02:14
2003.06.16
Телефон


1-50274
kull
2003-06-04 13:26
2003.06.16
Генерация HTML текста...


11-50268
Alexander
2002-09-22 10:05
2003.06.16
Можно ли задать BitBtn Enabled и Disabled изображения?


1-50368
Инга
2003-06-04 02:23
2003.06.16
как реализовать цикл for..next с шагом отличным от 1?