如何解决boost :: filesystem:path检测到两个路径共享同一物理驱动器
背景
我有一些复杂的应用程序,可能会占用大量磁盘空间(〜10TB)。为了防止由于光盘已满而引起的异常错误,我的应用程序具有一些逻辑来管理已存储的数据。
当前在Windows平台上运行,但已移植到Linux。
问题
两种数据可能存储在不同的物理驱动器上。根据该业务逻辑有些不同。现在,在Windows上,物理驱动器可以通过boost::filesystem::path::root_path()
进行标识(这并不完美,但在我的方案中已经足够了),但是在其他平台上,此逻辑却分崩离析,因为root_path()
总是empty()
问题
我正在寻找一些多平台解决方案(最好是增压)来检测两条路径是否共享同一物理驱动器。
如果没有这种情况,我将不得不使用平台特定的API,而我宁愿避免这种情况。
解决方法
我认为您最好的选择是退后一步,重新考虑您的方法:
如果您的操作系统和文件系统支持它,请尝试creating a hard link。现在,您可以相对可靠地知道它们是否是相同的文件系统。 (不幸的是,使用网络文件系统之类的方法仍然可以避免OS知道文件系统确实相同。)
即使对于吞吐量而言很有趣,并且可能需要操作系统特定的处理,知道最后是否是同一块硬盘对于防止在其上塞满废话似乎毫无意义。
如果您知道路径应该相同,则创建测试文件可以避免任何有缺陷的模拟,而只是让系统为您解决。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。