Автоматическое создание имен файлов

Я пытаюсь написать программу на C ++, которая создает некоторые файлы (.txt) и записывает результат в них. Проблема в том, что количество этих файлов не фиксировано в начале и появляется только в конце программы. Я хотел бы назвать эти файлы как «file_1.txt», «file_2.txt», …, «file_n.txt», где n является целым числом.

Я не могу использовать конкатенацию, потому что для имени файла требуется тип «const char *», и я не нашел способа конвертировать «string» в этот тип. Я не нашел ответа через Интернет и буду очень рад, если вы мне поможете.

4

Решение

Вы можете получить const char* из std::string используя c_str функция-член.

std::string s = ...;
const char* c = s.c_str();

Если вы не хотите использовать std::string (может быть, вы не хотите выделять память), тогда вы можете использовать snprintf создать отформатированную строку:

#include <cstdio>
...
char buffer[16]; // make sure it's big enough
snprintf(buffer, sizeof(buffer), "file_%d.txt", n);

n вот номер в имени файла.

6

Другие решения

 for(int i=0; i!=n; ++i) {
//create name
std::string name="file_" + std::to_string(i) + ".txt"; // C++11 for std::to_string
//create file
std::ofstream file(name);
//if not C++11 then std::ostream file(name.c_str());
//then do with file
}
5

… другой способ запугивать имя файла

#include <sstream>

int n = 3;
std::ostringstream os;
os << "file_" << n << ".txt";

std::string s = os.str();
1

Образец кода:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

string IntToStr(int n)
{
stringstream result;
result << n;
return result.str();
}

int main ()
{
ofstream outFile;
int Number_of_files=20;
string filename;for (int i=0;i<Number_of_files;i++)
{
filename="file_" + IntToStr(i) +".txt";
cout<< filename << "  \n";

outFile.open(filename.c_str());
outFile << filename<<" : Writing this to a file.\n";
outFile.close();
}return 0;
}
1

Я использую следующий код для этого, вы можете найти это полезным.

std::ofstream ofile;

for(unsigned int n = 0; ; ++ n)
{
std::string fname = std::string("log") + std::tostring(n) << + std::string(".txt");

std::ifstream ifile;
ifile.open(fname.c_str());

if(ifile.is_open())
{
}
else
{
ofile.open(fname.c_str());
break;
}

ifile.close();
}

if(!ofile.is_open())
{
return -1;
}

ofile.close();
0
По вопросам рекламы [email protected]