背景
我有一些复杂的应用程序,可能会占用大量磁盘空间(约10TB(。为了防止光盘满的情况下出现未加热的错误,我的应用程序有一些逻辑来映像存储的数据。
目前运行在Windows平台上,但已移植到Linux。
问题
两种数据可能存储在不同的物理驱动器上。取决于业务逻辑有点不同。现在,在Windows上,物理驱动器可以由boost::filesystem::path::root_path()
标识(这并不完美,但在我的场景中已经足够好了(,但在其他平台上,这种逻辑会崩溃,因为root_path()
始终是empty()
。
问题
我正在寻找一些多平台解决方案(最好是boost(来检测两条路径是否共享同一个物理驱动器
如果没有这样的事情,我将不得不使用特定于平台的API,我更愿意避免这种情况。
我认为你最好的选择是后退一步,重新思考你的方法:
如果您的操作系统和文件系统支持它,请尝试创建硬链接。现在,您可以相对可靠地知道它们是否是同一个文件系统。(不幸的是,使用网络文件系统等仍然可以避免操作系统知道文件系统实际上是一样的。(
知道它是否是同一个硬盘驱动器最终似乎对防止在它上面塞进太多垃圾毫无意义,即使它对吞吐量很感兴趣,并且可能需要特定于操作系统的处理。
如果你知道路径应该是相同的,那么创建一个测试文件可以避免任何有缺陷的模拟,让系统帮你解决问题。