#c #boost #boost-filesystem
#c #boost #boost-файловая система
Вопрос:
Фон
У меня есть какое-то сложное приложение, которое может занимать много места на диске (~ 10 ТБ). Чтобы предотвратить неотапливаемые ошибки, возникающие в сценариях с полным диском, в моем приложении есть некоторая логика, которая управляет сохраненными данными.
В настоящее время работает на платформе Windows, но портирован на Linux.
Проблема
Возможно, что два вида данных хранятся на разных физических дисках. В зависимости от этого бизнес-логика немного отличается. Теперь в Windows физический диск можно идентифицировать с помощью boost::filesystem::path::root_path()
(это не идеально, но достаточно хорошо в моих сценариях), но на других платформах эта логика разваливается, поскольку root_path()
всегда empty()
.
Вопрос
Я ищу какое-нибудь многоплатформенное решение (предпочтительно boost), чтобы определить, используют ли два пути один и тот же физический диск.
Если этого не произойдет, мне придется использовать API, зависящий от платформы, и я предпочитаю избегать этого.
Ответ №1:
Я думаю, что лучше всего сделать шаг назад и пересмотреть свой подход:
Если ваша ОС и файловая система поддерживают это, попробуйте создать жесткую ссылку. Теперь вы относительно надежно знаете, являются ли они одной и той же файловой системой. (К сожалению, при использовании сетевых файловых систем и т.п. все равно можно избежать того, чтобы ОС знала, что файловые системы действительно одинаковы.)
Знание того, является ли это одним и тем же жестким диском, в конечном итоге кажется довольно бессмысленным для предотвращения загрузки на него слишком большого количества мусора, даже если это интересно с точки зрения пропускной способности и, вероятно, требует специфичной для ОС обработки.
И если вы знаете, что пути должны быть одинаковыми, создание тестового файла позволяет избежать любого рода некорректного моделирования и просто позволить системе решить это за вас.
Комментарии:
1. Похоже, вы неправильно поняли вопрос. У меня есть два разных несвязанных пути. Один из них — это некоторые кэшированные файлы моего приложения, другой — местоположение базы данных (я могу определить, что он находится на другом компьютере). Моя цель — управлять дисковым пространством. Если на диске мало места, некоторые функции отключаются (для предотвращения общесистемных ошибок), и пользователь предупреждается, что ему следует очистить некоторые данные. Когда файлы базы данных и моего кэша находятся на разных дисках, логика выглядит немного по-другому.
2. @MarekR преуменьшил значение эквивалентного пути, подчеркнул только ту же файловую систему, отметил, что один и тот же жесткий диск кажется неинтересным в данной ситуации и в любом случае нуждается в специфичной для ОС обработке для определения.