确定两个文件路径引用同一文件对象的最佳方法是什么?

Mar*_*ata 26 c c++ linux windows

我想编写一个单元测试来检查两个文件路径是否相同,但我不想假设字符串表示是相同的.

例如,在Linux上,一个案例中的路径中可能存在符号链接,而另一个案例中则不存在符号链接.在Windows上,一个(X:\foo)上可以有驱动器表示法,另一个()上可以有网络符号//serverX/foo.最复杂的是,该文件可能已在Linux上以NFS共享(/path/to/file语法)编写,并在Windows上使用DOS语法验证(X:\to\file)其中X:是NFS挂载/path.

一些想法(在Stack Overflow上找到,但不统一):

  1. 在Linux上,比较来自的inode stat
  2. 使用realpath(这个平台独立吗?)
  3. 在Windows上,比较字符串 GetFullPathName
  4. 在Windows上,比较序列号和文件索引 GetFileInformationByHandle

什么是跨平台的最佳解决方案?我用C++写这个,但我可以明显地下降到C.

Bar*_*rry 19

你可以看看Boost.Filesystem图书馆.具体来说,有一种方法equivalent似乎完全符合您的要求:

using namespace boost::filesystem;

path p("/path/to/file/one");
path q("/sym_link/to/one");
assert(equivalent(p, q));
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这就是我在寻找的东西.作为参考,boost实现使用Linux上的inode比较和Windows上的序列号/文件索引比较. (6认同)