|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
Вкратце, VOIP-система(OPAL), IVR-подсистема. Выполняемая задача: проигрывание файла test.wav в линию при помощи vxml-скрипта, не суть: Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
Все-то оно работает как надо, но есть проблема. Файл test.wav проиграли, вызов давно закончился и т.п. но при попытке удаления test.wav (да хоть бы ручками из проводника) файл остается "закушенным", т.е. Действие не может быть выполнено, так как этот файл открыт в <имя проги.exe> И без закрытия/перезапуска <имя проги.exe> никак. Есть ли какой-то способ программно удалить таки этот файл в такой ситуации? Понятно что где-то баг в либе, и исходные коды тоже есть, но там черт ногу сломит. Т.е. надо как-то это "подрихтовать", 1) либо извне (из другого (Net-овского) .exe) 2) ну либо из самой <имя проги.exe>, но где он его "закусывает" я вряд ли найду. Т.е. хотя бы из-самой <имя проги.exe> дать команду на "разблокировку файла", зная путь к нему. Есть идеи? Я пока не знаю куда копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 21:55 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
Ну если дать команду на "разблокировку", то https://technet.microsoft.com/en-us/library/bb490961.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 22:39 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
Дмитрий77, А пробовали вначале файл переименовать, а потом удалить? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 09:40 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 11:13 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
Дмитрий77, можно наверное как-то грубо поступить... но есть шанс, что епнится удерживающий процесс... ну и вообще "Это не наши методы Сеня!" ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 12:05 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
buser, так можно и свой процесс потерять вместе с EXE. Какой-нибудь антивирь сочтет за нездоровую активность и упрячет в карантин. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 12:07 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
Да я с вами абсолютно согласен, что надо копать сорцы и искать почему Wav не закрывается. Но там черт ногу сломит. Сделал тестовый проект (дико извиняюсь, потому что это не C++ форум). Считаю что виноват файл vxml.cxx Лог грубо такой: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Номера строк файла указаны в скобках, сам файл прилагаю. Все вроде корректно: но C:\Users\Dmitry\Desktop\test_ivr\test.wav после проигрывания не удаляется. Открывается он (2325) PWAVFile * PVXMLChannel::CreateWAVFile(const PFilePath & fn, PBoolean recording) Задница в том, что эта версия Opal/ptlib очень старая. Но использовать более новую (а там это думаю пофиксено) не могу, глючит основной функционал кот. мне нужен. Написать автору - в лучшем случае пошлет к новой версии- не вариант. А отличия в версиях - огромны, чтобы как-то пытаться сравнить и впихнуть куски кода. Остается только копать этот код. Хотя вот счас вроде выписал лог, файл скорее всего открывается дважды: в VXML:8340 - для Enqueueing (выяснение что за файл?) и в Media Patch:1592 - (для проигрывания?) и кто-то его подозреваю забывает или по каким-то причинам не может закрыть Если не решу этот вопрос, не смогу добавить функционал в прогу. Потому как логично иметь возможность удалять проигранные файлы из GUI без остановки системы, а как их удалишь если они закушены. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 15:38 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
Дмитрий77, посмотрите лучше повнимательнее, как вы работаете с либой... возможно, имеет смысл инстанцировать(new) по необходимости и, как только она пропадает - delete. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 16:00 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
buser, в этом приложении запущен C++ exe (постоянно, VOIP-система). Общение с GUI/net происходит через команды (mailslot-ы). Перегружать систему за-ради удаления каких-то wav - ну сам понимаешь. Вариант нормального взаимодействия с системой (через API) у меня тоже наработан, но не в этом приложении, но суть от этого не меняется, перегружать систему из-за ерунды не вариант. Поэтому надо либо копать коды чтоб отпускали файл, либо отказаться от внедрения довольно заманчивого функционала (будет обидно-С). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 16:19 |
|
Удалить файл, "открытый в другой программе".
|
|||
---|---|---|---|
#18+
Нашел место "закусывания". c:\ptlib\src\ptclib\vxml.cxx Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
PWAVFile * wavFile -внутренний объект, открывает файл, чего-то там проверяет (видимо корректность файла), и далее нигде не используется, в PlayFile передается fn - путь к файлу а не wav-объект, он там открывается (и тьфу-тьфу корректно закрывается) по новой. Сделал delete wavFile (выделенная строчка которой в исходнике не было) проигрывает как положено после проигрывания файл можно удалить как должно (например из проводника). Так что гадости о которых спрашивал отменяются. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 19:53 |
|
|
start [/forum/topic.php?fid=20&msg=39308309&tid=1400354]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 275ms |
total: | 409ms |
0 / 0 |