背景
我有一些复杂的应用程序,可能会占用大量磁盘空间(约10TB)。为了防止由于光盘已满而导致的错误,我的应用程序提供了一些逻辑来管理已存储的数据。
当前在Windows平台上运行,但已移植到Linux。
问题
两种数据可能存储在不同的物理驱动器上。根据该业务逻辑有些不同。现在,在Windows上,可以通过boost::filesystem::path::root_path()标识物理驱动器(这不是完美的,但在我的场景中已经足够好了),但是在其他平台上,此逻辑却变得分散,因为root_path()始终是empty()

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

最佳答案

我认为您最好的选择是退后一步,重新考虑您的方法:
如果您的操作系统和文件系统支持它,请尝试creating a hard link。现在,您可以相对可靠地知道它们是否是相同的文件系统。 (不幸的是,使用网络文件系统之类的方法仍然可以避免OS知道文件系统确实相同。)
最终知道是否是同一块硬盘对于防止在其上塞满太多废话似乎毫无意义,即使它对于吞吐量很重要,并且可能需要操作系统特定的处理。
而且,如果您知道路径应该相同,则创建测试文件可以避免任何有缺陷的模拟,而只是让系统为您解决。

10-04 22:01