程序中有两个字符串。它们中的每一个都包含一些文件或文件夹的路径。如何检查C ++这些路径是否属于同一文件/文件夹?我可以使用Windows API执行此操作吗?
答案 0 :(得分: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);
效果:分别确定file_status s1和s2,就像状态(p1)和状态(p2)一样。
返回:true,如果sf1 == sf2且p1和p2解析为同一文件系统实体,则为false。
如果两个候选实体位于同一位置的同一设备上,则认为两条路径解析为同一文件系统实体。这可以通过POSIX stat结构的值来确定,如同两个路径的stat()一样,具有相等的st_dev值和相等的st_ino值。
[注意:POSIX要求“st_dev在局域网中必须是唯一的”。保守的POSIX实现也可能希望检查相等的st_size和st_mtime值。 Windows实现可以使用 GetFileInformationByHandle ()作为stat()的代理,并将“相同”视为dwVolumeSerialNumber,nFileIndexHigh,nFileIndexLow,nFileSizeHigh,nFileSizeLow,ftLastWriteTime.dwLowDateTime和ftLastWriteTime.dwHighDateTime的相等值。 - 结束说明]
引发:filesystem_error if(!exists(s1)&&!exists(s2))|| (is_other(s1)&& is_other(s2)),否则在错误报告中指定。
答案 1 :(得分:2)
查看GetFullPathName:http://msdn.microsoft.com/en-us/library/aa364963(v=vs.85).aspx
答案 2 :(得分:1)
您可能正在寻找GetFinalPathNameByHandle(hFile, outPath, outSize, FILE_NAME_NORMALIZED | VOLUME_NAME_GUID)
答案 3 :(得分:1)
使用IShellFolder::ParseDisplayName()
,SHParseDisplayName()
或ILCreateFromPath()
将路径字符串转换为PIDL,然后使用IShellFolder::CompareIDs()
或ILIsEqual()
将PIDL相互比较。< / p>
答案 4 :(得分:-3)
您可以使用String库的 substr 。 首先,您必须正确地将#include用于call substr。 请看这个链接:http://www.cplusplus.com/reference/string/string/substr/
祝你好运