Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.02.2012, 22:27
Siropchik Siropchik вне форума
Прохожий
 
Регистрация: 07.02.2012
Сообщения: 22
Репутация: 10
По умолчанию Как правильно проверить освободился фаил или нет?

В этой процедуре программа зацикливается, реагирует на все кроме кнопки завершения . Есть подозрение что в цикле while not RenameFile(FlacName+'.wav',FlacName+'t.wav') do Application.ProcessMessages;
возможно по какой то причине фаил не создан
Подскажите пожалуйста как лучше решить и обойти эту проблему?
программа может проработать 1минуту , а может и 10 мин.

PHP код:
procedure SaveFlac(FlacName:string);
var
fw:file of byte;
i:integer;
hfhwnd;
begin
    iniWav
;  //инициализировать структуру Wave
    
assignFile(fw,FlacName+'.wav'); 
    
rewrite(fw);   
    
blockWrite(fw,waveHdr,sizeOf(waveHdr)); //записать заголовок  wave
    
blockWrite(fw,proc_buf[0],qz); 
    
closeFile(fw);        
    while 
not RenameFile(FlacName+'.wav',FlacName+'t.wav') do Application.ProcessMessages;  

    
ShellExecute(hf'open''flac.exe'PChar(' -F '+FlacName+'t.wav'), nilSW_HIDE);
    while 
not RenameFile(FlacName+'t.flac',FlacName+'.flac') do Application.ProcessMessages;  

    
DeleteFile(FlacName+'t.wav');
 
end;
End

Последний раз редактировалось Siropchik, 08.02.2012 в 22:34.
Ответить с цитированием
  #2  
Старый 08.02.2012, 22:30
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Скорее всего в while. Например, если файл не найден. Или если он открыт другим процессом. Хотя в код особо не вчитывался.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 08.02.2012, 22:42
Siropchik Siropchik вне форума
Прохожий
 
Регистрация: 07.02.2012
Сообщения: 22
Репутация: 10
По умолчанию

Я перед циклом фаил создаю и записываю в него данные
А сам цикл нужен для того что бы подождать когда фаил освободится от других процессов, что бы потом можно было запустить преобразования файла в другой формат
Ответить с цитированием
  #4  
Старый 08.02.2012, 22:47
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Посмотри использование ключа {$I+/-}
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 08.02.2012, 22:54
Siropchik Siropchik вне форума
Прохожий
 
Регистрация: 07.02.2012
Сообщения: 22
Репутация: 10
По умолчанию

Честно говоря я не знаю что это за зверь, я не профессионал
я так понял это деректива , но где ее прописывать?
Цитата:
{$I+/-} - проверка результата ввода-вывода Если используется ключ {$1+}, при возникновении ошибки ввода-вывода программа прекращает работу. В случае ключа {$1-} при возникновении ошибки ввода-вывода программа не выбрасывается, а код ошибки можно получить с помощью функции IOResult. Ключ является локальным. По умолчанию используется ключ {$1+}. Эквивалент меню - Options|Compiler| I/O checking.

Последний раз редактировалось Siropchik, 08.02.2012 в 22:56.
Ответить с цитированием
  #6  
Старый 08.02.2012, 22:58
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Код:
{$I-}  
  assignFile(fw,FlacName+'.wav');  
  rewrite(fw);    
  if IOResult = 0 then
  begin
    blockWrite(fw,waveHdr,sizeOf(waveHdr)); //записать заголовок  wave 
    blockWrite(fw,proc_buf[0],qz);  
    closeFile(fw);
  end;
{$I+}  
А перед while, используй FileExists.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 08.02.2012 в 23:04.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter