0

Trying to create 20 files using ofstream. I could name each individual file on creation, file01.txt, file02.txt ect but wondered if it was possible to use a string variable in place of say the file name (file01.txt) and then use a loop to create the other files. Does the name have to be a declared name or is the use of a variable possible?

ofstream outfile( "file01.txt", ios::app);

Can a variable be put in it's place (and if so how do you code it?) please. If not is there any other way around this?

Thanks Leppie

4
Contributors
4
Replies
8
Views
6 Years
Discussion Span
Last Post by Leppie
Featured Replies
  • 1

    Agreed. An example: [code] #include <iostream> #include <string> #include <sstream> #include <fstream> using namespace std; string intToString(int t) { std::string ch; ostringstream outs; outs << t; // Convert value into a string. ch = outs.str(); return ch; } int main() { for ( int i = 0; i < 100000; … Read More

0

Use a stringstream to create the filenames.

#include <sstream>
stringstream ss;
ss<<filenamestring<<number<<".txt"; //number is the int from your loop index

Then use the .str() method of the stringstream to get the string in conjunction with the .c_str() operator of the string to get the char * that the ofstream method requires.

1

Agreed.

An example:

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

string intToString(int t)
{
  std::string ch;

  ostringstream outs; 
  outs << t;   // Convert value into a string.
  ch = outs.str();   
     
  return ch;
}      


int main()
{
    for ( int i = 0; i < 100000; i++ )
    {
        
      std::string name = "file" + intToString(i) + ".txt";  
    
      ofstream write (name.c_str());
      write.close();
    }
   return 0;
  
}
0

Aside from an intToStr function, you should also create yourself a leadingZeros function, which you'll probably want to use here. You'll need both very often, so it's a good idea to create a small library with such functions for private use. You can also use boost's lexical_cast instead of intToStr.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.