Как удалить файл даже если он занят др процессом
Как удалить файл даже если он занят др процессом
Добрый вечер, подскажите пожалуйста правильный алгоритм удаления файла даже если к нему кто то уже обратился? (если что нам глубоко плевать кто там с ним работает ) Спасибо.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Как удалить файл даже если он занят др процессом
Какая операционная система? Под кем запущен ваш процесс и другой процесс?
Нравится Yii? Давайте сделаем его лучше!.
Re: Как удалить файл даже если он занят др процессом
аудио файл находиться на сервере ubuntu 14.04, к нему обращаются, воспроизводят через браузер, пользователи по средствам веб приложения написанного на yii2, можно конечно написать try catch, но хочется удалять даже если занят файл. Спасибо внимание.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Как удалить файл даже если он занят др процессом
Если файл открыт, то он будет открыт, удалили ли его или нет. На самом деле удаляется только ссылка на ноду в файловой системе и пока хоть одна ссылка есть, файл по факту не удалён. Вам, скорее всего, придётся или дождаться пока файл отпустят, либо завершить процесс, его использующий.
Нравится Yii? Давайте сделаем его лучше!.
Re: Как удалить файл даже если он занят др процессом
Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл? или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?samdark писал(а): ↑2018.12.05, 00:04 Если файл открыт, то он будет открыт, удалили ли его или нет. На самом деле удаляется только ссылка на ноду в файловой системе и пока хоть одна ссылка есть, файл по факту не удалён. Вам, скорее всего, придётся или дождаться пока файл отпустят, либо завершить процесс, его использующий.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Как удалить файл даже если он занят др процессом
Никак. Yii не может сделать то, что невозможно в файловой системе.Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл?
Вот так да, можно. Ставьте в базе флаг "на удаление" и по крону, например, раз в пару часов пробегайтесь по таким записям.Или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?
Нравится Yii? Давайте сделаем его лучше!.
Re: Как удалить файл даже если он занят др процессом
Это прикольно, но к сожалению у меня нет опыта в этом, подскажите куда рыть что бы это реализовать как это реализовать?samdark писал(а): ↑2018.12.05, 13:07Никак. Yii не может сделать то, что невозможно в файловой системе.Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл?
Вот так да, можно. Ставьте в базе флаг "на удаление" и по крону, например, раз в пару часов пробегайтесь по таким записям.Или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?
Re: Как удалить файл даже если он занят др процессом
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 аналогичных статей в инете)
2) в том коде, где вы подошли к удалению файла, просто этот файл в вашей БД помечаем "к удалению". То есть добавляешь в вашу БД инфу, что файл нужно удалить. Если вы создали отдельную таблицу для этого функционала - тогда на этом шаге просто в новую таблицу добавляем запись, просто путь файла, который нужно удалить
3) пишем свою консольную команду, использую инструментарий yii
https://www.yiiframework.com/doc/guide/ ... te-command
В ней просто берем все записи с новой таблицы и пытаемся удалить каждый файл. в случае успеха - удаляем запись об удаленном файле с этой таблицы.
4) добавляем в cron вызов вашей консольной команды раз в день, к примеру. Вот что такое крон - https://help.ubuntu.ru/wiki/cron (или 100500 аналогичных статей в инете)