Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.068 c
15-1273985187
Учащийся
2010-05-16 08:46
2010.08.27
А как вы разрабатываете программы?


10-1167226388
Priest
2006-12-27 16:33
2010.08.27
Собственная реализация IDispatch


9-1184082923
|<ent
2007-07-10 19:55
2010.08.27
Алгоритм выстрела


11-1215697287
KOLBOSS
2008-07-10 17:41
2010.08.27
как добавить страницу в RichEdit


4-1226996099
Сергей
2008-11-18 11:14
2010.08.27
Как вывести Диалог свойств Windows К оприделённому файлу ?




   Наверх