通过迭代打开文件
Opening files through iteration
在我的
程序中需要打开大约 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
}
希望对您有所帮助!
相关文章:
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 在一次迭代中从 txt 文件中读取多行
- 在文件上实现迭代器
- 在文件夹迭代上实现 RAII
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 如何从目录迭代器中选择特定文件并进行比较
- ifstream不会在下一次迭代中打开文件
- 如何从文件中读取 n 个字节并使用<uint8_t>迭代器将它们放入向量中?
- 如何使用向量 c++ 迭代文件中单词的位置
- 在循环工作时,首先将两个文件读为向量,但仅次于迭代一次
- 使用 ofstream 迭代访问和写入多个文件
- 处理文件行流迭代器
- 迭代 txt 文件中的对象数组
- BSONCXX-是否有一种方法可以通过.bson转储文件中的文档进行迭代
- 使用 boost::filesystem 迭代目录时可以更改文件的顺序吗?
- 使用C++上的迭代读取和写入二进制文件
- 使用getline在文件中读取文件时,将值迭代值
- Cygwin目录迭代器中的Boost文件系统
- std :: filesystem :: recursive_directory_iterator在可执行文件本身上迭代