首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MATLAB的“filepart”函数的C++等价物

MATLAB的“filepart”函数的C++等价物
EN

Stack Overflow用户
提问于 2011-02-05 03:16:22
回答 4查看 2K关注 0票数 3

在MATLAB中,有一个名为filepart的很好的函数,它接受完整的文件路径,并将其解析为path、filename (不带扩展名)和扩展名,如文档中的以下示例所示:

代码语言:javascript
复制
file = 'H:\user4\matlab\classpath.txt';

[pathstr, name, ext] = fileparts(file)

>> pathstr = H:\user4\matlab

>> name = classpath

>> ext = .txt

所以我想知道在任何标准的C++或C库中有没有我可以使用的等价函数?或者我必须自己实现这个?我知道这很简单,但我想如果已经有了预制的东西,那将是更可取的。

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2011-02-05 03:24:43

boost库有一个file system组件"basic_path“,它允许您使用迭代器来发现文件名中的每个组件。这样的组件是特定于操作系统的,我相信你需要为Windows、Linux等单独编译boost。

票数 5
EN

Stack Overflow用户

发布于 2013-04-30 17:50:59

我只是写了这个简单的函数。它的行为类似于Matlab的fileparts,并且独立于平台工作。

代码语言:javascript
复制
struct FileParts
{
    string path;
    string name;
    string ext;
};

FileParts fileparts(string filename)
{
    int idx0 = filename.rfind("/");
    int idx1 = filename.rfind(".");

    FileParts fp;
    fp.path = filename.substr(0,idx0+1);
    fp.name = filename.substr(idx0+1,idx1-idx0-1);
    fp.ext  = filename.substr(idx1);

    return fp;
}
票数 3
EN

Stack Overflow用户

发布于 2018-06-05 00:27:40

C++11/14的一种平台无关的方式。

代码语言:javascript
复制
#include <experimental/filesystem> 

namespace fs = std::experimental::filesystem;
void fileparts(string full, string& fpath, string& fname, string& fext)
{
    auto source = fs::path(full);
    fpath = source.parent_path().string();
    fname = source.stem().string();
    fext = source.extension().string();
}
...
string fpath, fname, fext;
fileparts(full_file_path,fpath,fname,fext);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4901999

复制
相关文章

相似问题

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