我有一个文件夹,文件格式为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由于某种原因 任何帮助,将不胜感激。如果它是一个char或一个字符串,它的工作原理并不重要。我正在使用Xcode作为IDE,但该程序也必须在Windows上运行。
答案 0 :(得分:2)
您可以使用sprintf(... "...%03d...", ...)
获得一致的3位数字。
答案 1 :(得分:2)
如果您阅读了好文reference,您会发现根本不需要选择性部分:
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());