Как динамически изменять имя файла во время записи в цикле?
Я хотел бы сделать что-то вроде этого: в цикле первая итерация записывает некоторый контент в файл с именем file0.txt, второй итерацией file1.txt и т.д., просто увеличивайте число.
FILE *img;
int k = 0;
while (true)
{
// here we get some data into variable data
file = fopen("file.txt", "wb");
fwrite (data, 1, strlen(data) , file);
fclose(file );
k++;
// here we check some condition so we can return from the loop
}
Ответы
Ответ 1
int k = 0;
while (true)
{
char buffer[32]; // The filename buffer.
// Put "file" then k then ".txt" in to filename.
snprintf(buffer, sizeof(char) * 32, "file%i.txt", k);
// here we get some data into variable data
file = fopen(buffer, "wb");
fwrite (data, 1, strlen(data) , file);
fclose(file );
k++;
// here we check some condition so we can return from the loop
}
Ответ 2
Другой способ сделать это в С++:
#include <iostream>
#include <fstream>
#include <sstream>
int main()
{
std::string someData = "this is some data that'll get written to each file";
int k = 0;
while(true)
{
// Formulate the filename
std::ostringstream fn;
fn << "file" << k << ".txt";
// Open and write to the file
std::ofstream out(fn.str().c_str(),std::ios_base::binary);
out.write(&someData[0],someData.size());
++k;
}
}
Ответ 3
FILE *img;
int k = 0;
while (true)
{
// here we get some data into variable data
char filename[64];
sprintf (filename, "file%d.txt", k);
file = fopen(filename, "wb");
fwrite (data, 1, strlen(data) , file);
fclose(file );
k++;
// here we check some condition so we can return from the loop
}
Ответ 4
создайте имя файла, используя sprintf:
char filename[16];
sprintf( filename, "file%d.txt", k );
file = fopen( filename, "wb" ); ...
(хотя это решение C, поэтому тег неверен)
Ответ 5
Я сделал это следующим образом. Обратите внимание, что в отличие от некоторых других примеров, это будет фактически компилироваться и функционировать, как предполагалось, без каких-либо изменений рядом с препроцессором. Решение ниже итерирует пятьдесят имен файлов.
int main(void)
{
for (int k = 0; k < 50; k++)
{
char title[8];
sprintf(title, "%d.txt", k);
FILE* img = fopen(title, "a");
char* data = "Write this down";
fwrite (data, 1, strlen(data) , img);
fclose(img);
}
}