boost :: filesystem:path检测到两个路径共享同一物理驱动器

问题描述

背景

我有一些复杂的应用程序,可能会占用大量磁盘空间(〜10TB)。为了防止由于光盘已满而引起的异常错误,我的应用程序具有一些逻辑来管理已存储的数据。

当前在Windows平台上运行,但已移植到Linux。

问题

两种数据可能存储在不同的物理驱动器上。根据该业务逻辑有些不同。现在,在Windows上,物理驱动器可以通过boost::filesystem::path::root_path()进行标识(这并不完美,但在我的方案中已经足够了),但是在其他平台上,此逻辑却分崩离析,因为root_path()总是empty()

问题

我正在寻找一些多平台解决方案(最好是增压)来检测两条路径是否共享同一物理驱动器。
如果没有这种情况,我将不得不使用平台特定的API,而我宁愿避免这种情况。

解决方法

我认为您最好的选择是退后一步,重新考虑您的方法:

如果您的操作系统和文件系统支持它,请尝试creating a hard link。现在,您可以相对可靠地知道它们是否是相同的文件系统。 (不幸的是,使用网络文件系统之类的方法仍然可以避免OS知道文件系统确实相同。)

即使对于吞吐量而言很有趣,并且可能需要操作系统特定的处理,知道最后是否是同一块硬盘对于防止在其上塞满废话似乎毫无意义。

如果您知道路径应该相同,则创建测试文件可以避免任何有缺陷的模拟,而只是让系统为您解决。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...