测试文件路径的等效性

Vit*_*aly 4 c++ filesystems winapi

程序中有两个字符串.它们中的每一个都包含一些文件或文件夹的路径.如何检查C++这些路径是否属于同一文件/文件夹?我可以使用Windows API执行此操作吗?

seh*_*ehe 6

您可以使用Boost Filesystem.

它具有跨平台的额外重量; 这显然也是一个潜在的优势.如果您想要检查它,请注意下面的粗体API参考:GetFileInformationByHandle.

当量

bool equivalent(const path& p1, const path& p2);
bool equivalent(const path& p1, const path& p2, system::error_code& ec);
Run Code Online (Sandbox Code Playgroud)

效果:确定file_status s1和s2,分别如状态(p1)和状态(p2).

返回:如果sf1 == sf2且p1和p2解析为同一文件系统实体,则返回 true,否则返回 false.

如果两个候选实体驻留在同一位置的同一设备上,则认为两条路径解析为同一文件系统实体.这通过POSIX stat结构的值确定,如同两个路径的stat()一样,具有相等的st_dev值和相等的st_ino值.

[ 注意:POSIX要求"st_dev在局域网中必须是唯一的".保守的POSIX实现也可能希望检查相等的st_size和st_mtime值.Windows实现可以使用 GetFileInformationByHandle()作为stat()的代理,并将"same"视为dwVolumeSerialNumber,nFileIndexHigh,nFileIndexLow,nFileSizeHigh,nFileSizeLow,ftLastWriteTime.dwLowDateTime和ftLastWriteTime.dwHighDateTime的相等值. - 结束说明]

抛出:filesystem_error if(!exists(s1)&&!exists(s2))|| (is_other(s1)&& is_other(s2)),否则在错误报告中指定.