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

标签 c++ boost boost-filesystem

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

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

最佳答案

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

关于c++ - boost::filesystem:path检测到两个路径共享同一物理驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64099703/

相关文章:

c++ - Qt 模块错误 - QtOpenGL 中的 LNK 1112

c++ - boost::bind 如何调用私有(private)方法?

c++ - Boost regex 不替换在 regex 网站上正确替换的表达式

c++ - 哪些编译器支持 std::filesystem?

c++ - 向 boost::filesystem::path 添加辅助扩展的正确方法是什么?

c++ - 我是否总是必须将任何不影响实例状态的方法声明为 const?

c++ - 字符串比较返回值(用于对字符进行排序的应用程序吗?)

c++ - boost 文件系统中 is_regular 和 is_regular_file 之间的区别

c++ - Memset 中的异常

c++ - Boost::Bimap 等价于双向 multimap