#include <iostream>
using namespace std;
#include <sstream>
#include <fstream>
int main()
{
fstream plik;
ostringstream x;
int zmienna=1; //mozesz tak samo miec tutaj date czy cokolwiek chcesz
x<<"hello"<<zmienna<<".txt";
plik.open(x.str().c_str(), ios::out);
//operacje na pliku
plik.close();
return EXIT_SUCCESS;
}
Słowo wyjaśnienia:
- fstream - biblioteka do otwarcia pliku
- ostringstream - klasa z biblioteki sstream. W niej będzie przechowywany nasz ciąg.
- x<<"hello"<<zmienna<<".txt"; - ta linijka przypomina normalną operację ze strumieniem cout. Po tej operacji w naszej klasie ostringstream będzie przechowywany ciąg: "hello1.txt". Akurat tak go nazwałem. Możesz dodawać tam rozmaite ciągi czy zmienne.
- plik.open(x.str().c_str(), ios::out);
To może się wydawać zagmatwane, ale po kolei. Mamy tu funkcję open z biblioteki fstream. Służy ona do otwarcia pliku(w ten sposób ja działam na plikach). Jej definicja wygląda tak:
void open(const char* nazwa_pliku,ios_base::openmode tryb_otwarcia_pliku);
Najpierw przyjmuje ciąg będący tzw. C-string'iem, a potem tryb otwarcia pliku. Dla nas wystarczy tryb zapisywania danych do pliku czyli ios::out. Tyle dygresji. No więc dla tej funkcji mamy przekazać nasz obiekt x(ostringstream). Funkcja składowa str() klasy ostringstream udostępnia bufor, który jest łańcuchem C++ - obiektem klasy string. My jednak potrzebujemy tak jak mówiłem "starej wersji" stringu jakim jest c-string(na przykład char[20]). Żeby zamienić taki string na c-string potrzebna jest funkcji c_str(). I to nam razem daje:
x.str().c_str()
Składamy to razem i mamy tę linijkę:
- dalej operacje na pliku i zamknięcie pliku