![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как можно проверить занят ли аудио файл другим процессом? [D7, WinXP]
Dr. Andrew © (2005-06-24 05:07:00)Мастера! Подскажите - как можно проверить в процедуре сохранения аудио файла - используется ли он другим процессом в настоящее время или нет (при сохранении его с тем же именем, что и при открытии)? И как можно закрыть этот процесс, чтобы корректно перезаписать аудио файл? Спасибо всем за практический пример.
XProger (2005-06-24 18:38:00) [1]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1119347185&n=5
Dr. Andrew (2005-06-24 14:04:00) [2]Осуществить перезапись занятого процессом файла, можно только посредством убийства занимающего процесса.
А как это, например, можно сделать?
Для этого можно использовать, например Hook?
Пожалуйста, приведите пример типичного кода, например с Hook.
Спасибо за помощь!
XProger (2005-06-24 13:26:00) [3]*if not Result then
XProger (2005-06-24 13:25:00) [4]Моя ошибка, файл не закрывал...
function ActiveFile(FileName: string): boolean;
var
F : File of Byte;
begin
FileMode := 2;
AssignFile(F, FileName);
{$I-}
Reset(F);
{$I+}
Result := IOResult <> 0;
if Result then
CloseFile(F);
end;
Осуществить перезапись занятого процессом файла, можно только посредством убийства занимающего процесса.
Dr. Andrew (2005-06-24 11:28:00) [5]Код не работает!
function ActiveFile (FileName : string): Boolean;
var F : File of Byte;
begin
Result := False;
FileMode := 2;
AssignFile(F, FileName);
{$I-}
Reset(F);
{$I+}
if IOResult <> 0 then Result := True;
end;
В процедуре сохранения аудио файла я прописал следующий код:
if ActiveFile(SaveDialog1.FileName) then Exit;
FileStream := TFileStream.Create(SaveDialog1.FileName, fmCreate);
Функция ActiveFile всегда равна False!
После открытия файла, а затем его сохранения под тем же именем Windows выдает ошибку:
---------------------------
Debugger Exception Notification
---------------------------
Project soundeditor.exe raised exception class EFCreateError with message 'Cannot create file "E:\My Test\sounds\mysoundwav.wav". The process cannot access the file because it is being used by another process'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Какой есть выход? В чем моя ошибка?
Dr. Andrew (2005-06-24 11:11:00) [6]Большое спасибо за практический ответ!
Этим мы можем узнать - занят ли данный файл другим процессом.
А каким образом можно все же его перезаписать под тем же именем, независимо от того, что он используется другим процессом, после открытия его в процедуре, например OpenAudioFile, с помощью OpenDialog? Например, как это реализовано в Cool Edit Pro 2.0? Там, после открытия файла без его переименования, можно постоянно его перезаписывать под тем же именем.
XProger (2005-06-24 05:56:00) [7]
var
F : File of Byte;
begin
FileMode := 2;
AssignFile(F, SaveDialog1.FileName);
{$I-}
Reset(F);
{$I+}
if IOResult <> 0 then Занят;
end;
Dr. Andrew (2005-06-24 05:24:00) [8]Небольшое уточнение вопроса!
При вызове в процедуре сохранения аудио файла следующего кода - FileStream := TFileStream.Create(SaveDialog1.FileName, fmCreate), где FileStream : TFileStream, и сохранении его без изменения имени, Windows выдает ошибку, что данный файл уже используется другим процессом и не может его открыть или создать. Как можно либо до вызова этого кода проверить - занят ли аудио файл другим процессом или корректно его все же открыть? Пожалуйста, маленький практический пример. Всем спасибо!