首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >路径简化/简化

路径简化/简化
EN

Stack Overflow用户
提问于 2009-09-23 16:47:33
回答 2查看 1.2K关注 0票数 3

我正在编写一些代码来管理磁盘上的自定义文件结构,并将其同步到未连接的系统。我的要求之一是能够在实际生成同步内容之前估计同步的大小。作为一个简单的解决方案,我已经将一个带有完整路径文件名的map组合在一起,作为高效查找已扫描内容的关键字。

当我的文件结构中有多个文件以不同的方式从不同的地方引用时,我会遇到这个问题。例如:

代码语言:javascript
复制
C:\DataSource\files\samplefile.txt
C:\DataSource\data\samples\..\..\files\samplefile.txt
C:\DataSource\etc\..\files\samplefile.txt

这3个路径字符串都引用磁盘上的同一文件,但是它们的字符串表示不同。如果我逐字地将它们放到地图中,我将计算samplefile.txt的大小3次,并且我的估计将是错误的。

为了找到解决这个问题的方法,我希望boost::filesystem::path提供一个函数来减少或简化路径,但我没有看到任何类似的东西。使用路径分解表和路径迭代器,我编写了以下函数(用于Windows环境):

代码语言:javascript
复制
std::string ReducePath( std::string Path )
{
    bfs::path input( Path );
    bfs::path result( "" );
    bfs::path::iterator it, endIt;
    for( it = input.begin( ), endIt = input.end( ); it != endIt; it ++ )
    {
        if( (*it) == ".." )
        {
            // Remove the leaf directory.
            result = result.parent_path( );
        }
        else if( (*it) == "." )
        {
            // Just ignore.
        }
        else
        {
            // Append the element to the end of the current result.
            result /= (*it);
        }
    }

    return result.string( ).c_str( );
}

我有两个问题。

首先,有没有一个标准函数可以提供这种功能,或者boost或其他库中已经存在了这个函数?

其次,我并不完全有信心我写的函数在所有情况下都能工作,我希望有更多的人关注它。它在我的测试中起作用了。有没有人看到它会崩溃的情况?

EN

回答 2

Stack Overflow用户

发布于 2011-02-01 14:48:08

boost中有一个函数

布尔等价( const Path1& p1,const Path2& p2);

它检查两条路径是否相等。这将是理想的,除非没有等价的<运算符(也许不可能是)。

有没有人看到这样的情况会被打破...

也许;如果您有像"../test.txt“这样的输入,那么父路径可能不会执行您想要的操作。我建议先完成路径。

请参阅文件系统库中的"complete“。

祝你好运--罗伯特·纳尔逊

票数 2
EN

Stack Overflow用户

发布于 2009-09-23 16:53:45

虽然不是完全正确,但这个问题会有帮助:Best way to determine if two path reference to same file in Windows?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1467274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档