通过迭代打开文件

Opening files through iteration

本文关键字:文件 迭代      更新时间:2023-10-16
在我的

程序中需要打开大约 50 个文件才能读取,我将它们全部从 1.txt 重命名为 50.txt 希望我可以通过一个递增文件编号的循环传递文件名,但我不知道如何/认为不可能将整数传递给 char,或者有更好的方法来解决我的情况。

char* filename = "";
for(int i =0; i < 50; i++)
{
if(i == 0){filename = "0.txt";}
if(i == 1){filename = "1.txt";} // ..
int num = 0, theinteger = 0;
ifstream in(filename, ios::binary);
unsigned char c;
while( in.read((char *)&c, 1) )
{       
        in >> theinteger;
        sca.chac[num]=theinteger; 
        num++;
}
}
return 0;
有一个

相对简单的方法可以做到这一点 - 在 C 中,使用 sprintf 函数,如下所示:

char filename[100];
sprintf(filename, "%d.txt", i);

在C++中,使用 ostringstream

ostringstream oss;
oss << i << ".txt";

只需使用以下方法之一构建表示必须打开的文件名称的字符串:

stringstream ss;
ss << anIntVal;
mystring = ss.str() + ".txt";

mystring = boost::lexical_cast<string>(anIntVal);
mystring += ".txt"

看看 sprintf 函数。它的工作方式就像 printf 函数一样,但它打印到char*。您必须确保char*足够大(您需要的字符数加上 NULL 终止符的 1)。然后,您可以在 for 循环中递增文件编号,并使用 sprintf 函数更新char* filename,然后打开文件。

在您的情况下:

char* filename[10];
int i;
for( i = 0; i <= 50; ++i){
    sprintf(filename,"%i.txt",i);
    //do stuff with the files
}

我发现它很有用(例如,对于使用填充文件名的良好排序,这也使为char*分配空间变得更加容易:

char* filename = "50.txt"; //the highest number should fit
int i;
for( i = 0; i <= 50; ++i){
    sprintf(filename,"%02i.txt",i);
    //do stuff with the files
}

希望对您有所帮助!