为不同的文件扩展名调用不同的函数

Posted

技术标签:

【中文标题】为不同的文件扩展名调用不同的函数【英文标题】:Invoke different functions for different file extensions 【发布时间】:2014-06-30 16:02:08 【问题描述】:

情况如下:

我有一个用 C++ 编写的 Graph 类,我需要从 Files 构建 Graph 对象。问题是 Graph 以多种不同的方式存储在文件中,所以我正在考虑一个函数,使用文件扩展名,可以调用正确的过程来构建特定格式的 Graph。我应该如何进行?是我错了,还是我不能在课堂上重载 operator>>?提前致谢。

【问题讨论】:

看看这篇文章有没有帮助***.com/questions/51949/… 【参考方案1】:

operator>> (应该)不知道从中提取的流的任何细节,因此使用此运算符可能是错误的做法。

最好的方法是:

graph_type load_from_file(const std::string& file_path)  //or use something like boost::filesystem::path

    std::ofstream file  file_path ;

    if(endswith(file_path, ".graph") 
        return deserialize_from_graph(ofstream);
    
    if(endswith(file_path, ".g2") 
        return deserialize_from_g2(ofstream);
    
    //other formats here


    //else throw

注意,endswith 不是来自标准库,但是 boost 在它的字符串算法中有一个实现。

【讨论】:

【参考方案2】:

您如何确定数据的存储方式。如果只是 扩展,你只需要一张地图 std::stringpointer_to_function。如果一样 扩展可以有几种不同的表示, 区分,例如,通过在前几个字节 文件或某些常见标题中的信息,您必须 在您阅读这些内容之前,最终选择不同 字节——同样,映射到指向函数的指针就可以了 诀窍。

根据要读取的格式的复杂程度,您可能需要 将指向阅读器函数的指针替换为指向的指针 一个工厂函数,它返回一个读取器类的实例, 来源于抽象读者。

【讨论】:

以上是关于为不同的文件扩展名调用不同的函数的主要内容,如果未能解决你的问题,请参考以下文章

C ++创建不同扩展名的文件

在 C 中读取具有不同扩展名的 .txt 文件

视频转换后如何命名输出文件与输入文件相同但扩展名不同? [复制]

Robot Framework之扩展打开不同版本的谷歌浏览器

如何使用 PowerShell 按名称过滤具有不同扩展名文件的文件?

批量重命名具有不同扩展名Linux脚本的多个文件?