Форум: "Media";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
ВнизКак можно проверить занят ли аудио файл другим процессом? Найти похожие ветки
← →
Dr. Andrew (2005-06-24 05:07) [0]Мастера! Подскажите - как можно проверить в процедуре сохранения аудио файла - используется ли он другим процессом в настоящее время или нет (при сохранении его с тем же именем, что и при открытии)? И как можно закрыть этот процесс, чтобы корректно перезаписать аудио файл? Спасибо всем за практический пример.
← →
Dr. Andrew (2005-06-24 05:24) [1]Небольшое уточнение вопроса!
При вызове в процедуре сохранения аудио файла следующего кода - FileStream := TFileStream.Create(SaveDialog1.FileName, fmCreate), где FileStream : TFileStream, и сохранении его без изменения имени, Windows выдает ошибку, что данный файл уже используется другим процессом и не может его открыть или создать. Как можно либо до вызова этого кода проверить - занят ли аудио файл другим процессом или корректно его все же открыть? Пожалуйста, маленький практический пример. Всем спасибо!
← →
XProger © (2005-06-24 05:56) [2]
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 11:11) [3]Большое спасибо за практический ответ!
Этим мы можем узнать - занят ли данный файл другим процессом.
А каким образом можно все же его перезаписать под тем же именем, независимо от того, что он используется другим процессом, после открытия его в процедуре, например OpenAudioFile, с помощью OpenDialog? Например, как это реализовано в Cool Edit Pro 2.0? Там, после открытия файла без его переименования, можно постоянно его перезаписывать под тем же именем.
← →
Dr. Andrew (2005-06-24 11:28) [4]Код не работает!
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
---------------------------
Какой есть выход? В чем моя ошибка?
← →
XProger © (2005-06-24 13:25) [5]Моя ошибка, файл не закрывал...
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;
Осуществить перезапись занятого процессом файла, можно только посредством убийства занимающего процесса.
← →
XProger © (2005-06-24 13:26) [6]*if not Result then
← →
Dr. Andrew (2005-06-24 14:04) [7]Осуществить перезапись занятого процессом файла, можно только посредством убийства занимающего процесса.
А как это, например, можно сделать?
Для этого можно использовать, например Hook?
Пожалуйста, приведите пример типичного кода, например с Hook.
Спасибо за помощь!
← →
XProger © (2005-06-24 18:38) [8]http://delphimaster.net/view/4-1119347185/
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c