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

Вниз

Задержка выполнения программы   Найти похожие ветки 

 
Записюн   (2010-03-02 16:39) [0]

Столкнулся с проблемой. При сохранении в типизированный файл большого объема инфы одной записью (Запись получается большая, но в файле она одна) возникают ошибки на методе CloseFile. Если зацементировать строку с закрытием файла то все номрально и без ошибок. При этом если после этого просто нажать на кнопку с вызовом этого метода то все тож проходит без ошибок. Предполагаю, что процедура Write "записывает слишком долго" и при выходе из нее запись еще не завершена. Такое возможно? И в связи с этим вопрос... как проверить не занят ли в настоящее время файл и могу ли я его закрыть.


 
Sairex   (2010-03-02 16:48) [1]

А через TFileStream не пробывал писать?


 
Плохиш ©   (2010-03-02 18:44) [2]


> Записюн   (02.03.10 16:39)  

В вашем глюкокоде ошибка.


 
Вася   (2010-03-02 19:30) [3]


> Предполагаю, что процедура Write "записывает слишком долго"
> и при выходе из нее запись еще не завершена. Такое возможно?
>


нет, вызов синхронный. ТО есть управление будет получено обратно уже после завершения операции (успешного или неуспешного)


 
Сергей М. ©   (2010-03-02 19:51) [4]


> в типизированный файл


Судя по всуе упомянутой "типизации" налицо глюкокод


 
Игорь Шевченко ©   (2010-03-02 23:15) [5]


> Предполагаю, что процедура Write "записывает слишком долго"
> и при выходе из нее запись еще не завершена


предположение неверное


 
Записюн   (2010-03-03 11:23) [6]

const
 MaxPN=100;

type
TWayPN=array[1..MaxPN,1..MaxPN]of integer;

var
 FWayPN        :file of TWayPN;

...

{$I-}
 AssignFile(FWayPN,PathProgramm+PathDictionary+PathCurDistr+PathWayPN);
 Reset(FWayPN);
 Read(FWayPN,WayPN);
 //вставить задержку по времени

//  closeFile(FPN);
{$I+}
 if IOResult<>0
 then
 begin
   ClearWayPN;
   AssignFile(FWayPN,PathProgramm+PathDictionary+PathCurDistr+PathWayPN);
   Rewrite(FWayPN);
   Write(FWayPN,WayPN);
//   closeFile(FPN);
 end;

так вот всегда эта процедура проходит по ветви с ошибкой. Когда регистр IOresult не равен 0. Может дейсчвительно я где-то накосячил?


 
Сергей М. ©   (2010-03-03 11:32) [7]

Конечно накосячил)

OResult returns the result of the last Delphi I/O routine when I/O-checking is off (that is, when using the {$I-}  compiler option)


 
Записюн   (2010-03-03 12:03) [8]

Ну...все верно. Компилятор в общем и целом хранит в регистре ioresult сотсояние ошибок ввода вывода. Где косяк? Или я опять что-то непонимаю


 
Сергей М. ©   (2010-03-03 12:07) [9]

Чего "все верно"-то ?

Для того чтобы IOResult возвращала актуальный результат, опция $I должна быть выключена !

А у тебя она, наоборот, включена)
Вот IOResult тебе хрень и возвращает. А ты эту хрень пытаешься трактовать как актуальный результат непонятно какой операции)


 
Записюн   (2010-03-03 12:10) [10]

Блин. Все. Вопрос снят. Сам косяк. Прошу прощения


 
Сергей М. ©   (2010-03-03 12:13) [11]

Да и к чему этот геморрой с AssignFile и иже с ней ?


with TFileStream.Create("myfile", fmOpenRead) do
try
 ReadBuffer(WayPN, SizeOf(WayPN));
finally
 Free;
end;


 
Записюн   (2010-03-03 12:24) [12]

Подождите. Помоему директивы компилятору написаны в верном порядке. Перед критичным участком отключам вывод ошибок ввода ввывода, чтоб не выскакивало неконтролируемое исключение, а потом за этот бонус вынуждены вручную проверять состояние регистра. Разве нетак? А в указанной строке


> Сергей М. ©   (03.03.10 11:32) [7]
> Конечно накосячил)OResult returns the result of the last
> Delphi I/O routine when I/O-checking is off (that is, when
> using the {$I-}  compiler option)


грубо говоря написано, что проверять значения регистра можно толко после блока выключить. Но и насколько мне известно ошибку проверять можно толко после включения директивой.

А ошибка которую я искал оказалась тривиальной. Я закрываю не тот файл)))


 
Записюн   (2010-03-03 12:25) [13]

Программа учебная. Потоки исключаются



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

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

Наверх




Память: 0.49 MB
Время: 0.049 c
15-1272623750
Гость
2010-04-30 14:35
2010.08.27
VS .NET, Winforms


2-1274166166
pro_xaoc
2010-05-18 11:02
2010.08.27
Загружать изображение при наведении и кликании мышью


15-1273615275
Германн
2010-05-12 02:01
2010.08.27
Метод округления в функции FloatToStrF


15-1274965860
bss
2010-05-27 17:11
2010.08.27
DevExpress -> cxGrid, регистронезависимые фильтры


2-1273331156
darts116
2010-05-08 19:05
2010.08.27
Объявление множества. (Delphi 2009)