1

我有一个文件夹,里面装满了这种格式的文件 FileName000.extension FileName001.extension 等。我需要将它们全部打开并用 C++ 做一些事情。我试过的是这样的:

for(int i=0; i<number_of_files; i++){
        char filename[64];
if(i<10){
        sprintf(filename, "/Path/To/File/FileName00%i.extension", i);
}
    if(i<100){
        sprintf(filename, "/Path/To/File/FileName0%i.extension", i);
}
else{
        sprintf(filename, "/Path/To/File/FileName%i.extension", i);
}
        ifstream infile ( filename );

//DO STUFF TO FILES HERE INSIDE THE FOR LOOP
}

由于某种原因,由于ifs,这似乎不起作用任何帮助将不胜感激。它是一个字符还是一个字符串并不重要,只要它可以工作。我使用 Xcode 作为 IDE,但该程序也必须在 Windows 上运行。

4

2 回答 2

2

您可以使用sprintf(... "...%03d...", ...)获得一致的 3 位数字。

于 2013-07-05T14:16:57.063 回答
2

如果您阅读了一个很好的参考资料,您会发现您根本不需要选择性部分:

snprintf(filename, sizeof(filename), "/Path/To/File/FileName%03d.extension", i);

3格式代码告诉使用snprintf三个字符作为字段宽度,前导0告诉它对小于 99 的值使用前导零。


至于您的if陈述存在的问题,您缺少一个else

if (i < 10) { ... }
else if (i < 100) { ... }
else { ... }

如果你想要一个 C++ 解决方案,那么你可以使用std::ostringstream

std::ostringstream os;
os << "/Path/To/File/FileName" << std::setfill('0') << std::setw(3) << i << ".extension";

ifstream file(os.str());
于 2013-07-05T14:17:18.880 回答