2011-02-04 61 views
3

在MATLAB中有一个很好的函数叫做fileparts,它接受完整的文件路径并将其解析为路径,文件名(不带扩展名)和扩展名,如以下示例文档所示:C++相当于MATLAB的“文件部分”功能

file = 'H:\user4\matlab\classpath.txt'; 

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

>> pathstr = H:\user4\matlab 

>> name = classpath 

>> ext = .txt 

所以我想知道是否有任何标准C++或C库中的等价函数可以使用?或者我必须自己实施这个?我意识到这很简单,但我想如果已经有一些预先制作的东西会更好。

谢谢。

+0

这些函数存在,但它们是OS库的一部分,而不是C++标准。 C++标准根本没有提及文件名。你在使用什么操作系统? – 2011-02-04 19:20:53

+0

Windows 7 Pro x64。 – SSilk 2011-02-04 19:59:39

回答

5

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

3

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

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; 
}