Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Записюн   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.061 c
2-1265974282
Егорка
2010-02-12 14:31
2010.08.27
Дерево в памяти + Listview


15-1268404840
Илья_
2010-03-12 17:40
2010.08.27
Ошибка при отладке программы с помощью функции Trace into


15-1274974724
@!!ex
2010-05-27 19:38
2010.08.27
Как правильно выкупать доменное имя?


2-1274791952
DROWSY
2010-05-25 16:52
2010.08.27
Как симмитировать нажатие эскейпа на гриде?


2-1275124913
tamako
2010-05-29 13:21
2010.08.27
dbf в txt как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский