【发布时间】:2017-11-24 19:32:02
【问题描述】:
下一段代码将文件名作为字符串,如果文件是位图(扩展名 .bmp),则应该返回不带扩展名的名称。
InputPicFolder 是一个包含输入文件夹路径的字符串。
path p(InputPicFolder);
for (auto i = directory_iterator(p); i != directory_iterator(); i++)
{
if (!is_directory(i->path())) //eliminate directories
{
string filename = i->path().filename().string();
//string filename = "APicture.bmp";
int len = filename.length();
if (len > 4)
{
size_t found = filename.find('.');
string EXT = filename.substr(found + 1);
if (EXT.compare("bmp") == 0)
{
string filenameWOExtension = filename.substr(0, found);
cout << filenameWOExtension;
}
}
}
}
但是我得到一个空字符串作为filenameWOExtension的输出
有人知道我做错了什么吗?我觉得这是一个非常愚蠢的问题,我疲惫的眼睛看不到。
edit - 使用 boost 部分更新了代码。似乎没有改变结果。即使我用“APicture.bmp”覆盖字符串,我的输出仍然是""。
编译器 - MSVC14.1
【问题讨论】:
-
使用
boost::filesystem::path或新的std版本(如果可用)将是处理这些事情的好主意。 -
您是否尝试 (1) 在调用
substr之前打印found的值? (2) 确保您的输出缓冲区在程序停止之前被刷新? -
我不能reproduce你的问题。
-
@RayToal (1) 我没有明确打印它,我正在使用 VS 调试器来观察变量。 (2) 试试这个
-
@Roy2511 那么
found的值是多少呢?