如何从 C 中的路径中提取文件名和扩展名

新手上路,请多包涵

我有一个存储在 .log 中的文件列表,语法如下:

 c:\foto\foto2003\shadow.gif
D:\etc\mom.jpg

我想从此文件中提取名称和扩展名。你能举一个简单的例子吗?

原文由 Octavian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 877
2 个回答

要提取没有扩展名的文件名,请使用 boost::filesystem::path:: stem 而不是丑陋的 std::string::find_last_of(“.”)

 boost::filesystem::path p("c:/dir/dir/file.ext");
std::cout << "filename and extension : " << p.filename() << std::endl; // file.ext
std::cout << "filename only          : " << p.stem() << std::endl;     // file

原文由 Nickolay Merkin 发布,翻译遵循 CC BY-SA 3.0 许可协议

以下技巧从 C++ 中没有扩展名的文件路径中提取文件名(不需要外部库):

 #include <iostream>
#include <string>

using std::string;

string getFileName(const string& s) {
char sep = '/';
#ifdef _WIN32
sep = '\\';
#endif
size_t i = s.rfind(sep, s.length());
if (i != string::npos)
{
string filename = s.substr(i+1, s.length() - i);
size_t lastindex = filename.find_last_of(".");
string rawname = filename.substr(0, lastindex);
return(rawname);
}

return("");
}

int main(int argc, char** argv) {

string path = "/home/aymen/hello_world.cpp";
string ss = getFileName(path);
std::cout << "The file name is \"" << ss << "\"\n";
}

原文由 Aymen Alsaadi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题