Как удалить файл даже если он занят др процессом

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Solutions
Сообщения: 93
Зарегистрирован: 2014.01.09, 13:23
Откуда: Казахстан. ВКО. Усть-Каменогорск

Как удалить файл даже если он занят др процессом

Сообщение Solutions »

Добрый вечер, подскажите пожалуйста правильный алгоритм удаления файла даже если к нему кто то уже обратился? (если что нам глубоко плевать кто там с ним работает :D ;) ) Спасибо.
Solutions
Сообщения: 93
Зарегистрирован: 2014.01.09, 13:23
Откуда: Казахстан. ВКО. Усть-Каменогорск

Re: Как удалить файл даже если он занят др процессом

Сообщение Solutions »

Solutions писал(а): 2018.11.28, 14:57 Добрый вечер, подскажите пожалуйста правильный алгоритм удаления файла даже если к нему кто то уже обратился? (если что нам глубоко плевать кто там с ним работает :D ;) ) Спасибо.
Совсем ни у кого нет идей?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Как удалить файл даже если он занят др процессом

Сообщение samdark »

Какая операционная система? Под кем запущен ваш процесс и другой процесс?
Solutions
Сообщения: 93
Зарегистрирован: 2014.01.09, 13:23
Откуда: Казахстан. ВКО. Усть-Каменогорск

Re: Как удалить файл даже если он занят др процессом

Сообщение Solutions »

samdark писал(а): 2018.11.30, 21:42 Какая операционная система? Под кем запущен ваш процесс и другой процесс?
аудио файл находиться на сервере ubuntu 14.04, к нему обращаются, воспроизводят через браузер, пользователи по средствам веб приложения написанного на yii2, можно конечно написать try catch, но хочется удалять даже если занят файл. Спасибо внимание.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Как удалить файл даже если он занят др процессом

Сообщение samdark »

Если файл открыт, то он будет открыт, удалили ли его или нет. На самом деле удаляется только ссылка на ноду в файловой системе и пока хоть одна ссылка есть, файл по факту не удалён. Вам, скорее всего, придётся или дождаться пока файл отпустят, либо завершить процесс, его использующий.
Solutions
Сообщения: 93
Зарегистрирован: 2014.01.09, 13:23
Откуда: Казахстан. ВКО. Усть-Каменогорск

Re: Как удалить файл даже если он занят др процессом

Сообщение Solutions »

samdark писал(а): 2018.12.05, 00:04 Если файл открыт, то он будет открыт, удалили ли его или нет. На самом деле удаляется только ссылка на ноду в файловой системе и пока хоть одна ссылка есть, файл по факту не удалён. Вам, скорее всего, придётся или дождаться пока файл отпустят, либо завершить процесс, его использующий.
Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл? или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Как удалить файл даже если он занят др процессом

Сообщение samdark »

Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл?
Никак. Yii не может сделать то, что невозможно в файловой системе.
Или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?
Вот так да, можно. Ставьте в базе флаг "на удаление" и по крону, например, раз в пару часов пробегайтесь по таким записям.
Solutions
Сообщения: 93
Зарегистрирован: 2014.01.09, 13:23
Откуда: Казахстан. ВКО. Усть-Каменогорск

Re: Как удалить файл даже если он занят др процессом

Сообщение Solutions »

samdark писал(а): 2018.12.05, 13:07
Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл?
Никак. Yii не может сделать то, что невозможно в файловой системе.
Или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?
Вот так да, можно. Ставьте в базе флаг "на удаление" и по крону, например, раз в пару часов пробегайтесь по таким записям.
Это прикольно, но к сожалению у меня нет опыта в этом, подскажите куда рыть что бы это реализовать как это реализовать?
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: Как удалить файл даже если он занят др процессом

Сообщение S c »

1) есть у вас таблица в БД хранящая ваши файлы? Если есть - то добавляем в неё дополнительную колонку "на удаление", с типом int/tiny int (со значениями 1/0), либо bool (true/false), все зависит от вашего хранилища данных и его возможностей. если нет таблицы отдельной для файлов - создаем новую, например "files_to_delete", в ней к примеру колонки: id; path (или просто имя файла, если path (пусть к файлу) у вас забит в конфиге, к примеру)
2) в том коде, где вы подошли к удалению файла, просто этот файл в вашей БД помечаем "к удалению". То есть добавляешь в вашу БД инфу, что файл нужно удалить. Если вы создали отдельную таблицу для этого функционала - тогда на этом шаге просто в новую таблицу добавляем запись, просто путь файла, который нужно удалить
3) пишем свою консольную команду, использую инструментарий yii
https://www.yiiframework.com/doc/guide/ ... te-command
В ней просто берем все записи с новой таблицы и пытаемся удалить каждый файл. в случае успеха - удаляем запись об удаленном файле с этой таблицы.
4) добавляем в cron вызов вашей консольной команды раз в день, к примеру. Вот что такое крон - https://help.ubuntu.ru/wiki/cron (или 100500 аналогичных статей в инете)
Ответить