Łączenie dwóch plików txt wybranych przez użytkownika

0

Hej mam problem chce zrobić by funkcja którą zaraz pokaze łączyła pliki które użytkownik sobie zażyczy
udało mi sie zrobić taki szkielet tego proszę o poradę jak zrobić by funkcja łączyła dwa lub wiecej
plik tekstowe wywołane przez użytkownika.
Program bazuje na klasach.

int pliki::laczenie() //laczenie plikow txt 
{
    string linie;		
   	Sleep(800);				
   	ifstream plik ;			
   	plik.open(nazwa[i]);
	std::ofstream zapis	("wyjsciowy.txt",ios::out); 			
	std::string zmienna1, zmienna2, zmienna3 ;
	
	 		cout << "\t\t\tPodaj nazwe pliku do zlaczenia: ";		
   			cin >> nazwa[i];	
   			cout << "\t\t\tPodaj druga nazwe pliku do zlaczenia: ";
   			cin >> nazwa[i];
   			
			getline(plik,zmienna1);								
    	  	zapis << zmienna1<<"\n";						
    	  	
    	  	
				Sleep(1400);
				cout << endl ;
				cout << endl ;
				cout << "\t\t\tPracuje...Prosze czekac..." << endl ;
				Sleep(1500);
				cout << endl;
				cout << endl;
				cout << "\t\tUDALO SIE POMYSLNIE POLACZYC PLIKI...! "  ;
				cout << endl ;
				cout << endl;
				cout << "\t\tSPRAWDZ PLIK TEKSTOWY I UPEWNIJ SIE" << endl ;
				cout << "\t\tZE OPERACJA ZOSTALA POMYSLNIE WYKONANA...! " ;
				Sleep(1400);
				cout << endl;
  				cout << endl;
  				plik.close();
  				zapis.close();	
				return 0 ;								
}

0

Ten kod to jakaś masakra. Rozdziel kopiowanie 1 pliku do drugiego na osobną funkcję. W funkcji, która ma łączyć (kopiować) zawartość z wielu plików w jeden wywołuj w funkcję kopiowania 1 pliku. Nazwy wszystkich plików do skopiowania prześlij do funkcji łączącej np jako std::initializer_liststd::string.

0
void funkcja_kopiujaca_jeden_plik(string nazwa_wejscie, string nazwa_wyjscie) {
    ifstream wej(nazwa_wejscie.c_str());
    ofstream wyj(nazwa_wyjscie.c_str(), ios::out | ios::ate);
    string tmp;
    while(getline(wej, tmp)) {
        wyj << tmp << "\n";
    }
}

void funkcja_kopiujaca_wiele_plikow(array<string> nazwy_wejscie, string nazwa_wyjscie) {
    for(size_t i = 0; i < nazwy_wejscie.size(); ++i) {
        funkcja_kopiujaca_jeden_plik(nazwy_wejscie[i], nazwa_wyjscie);
    }
}

Mniej wiecej cos takiego.

0

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream plik1 ("plik1.txt", ios::binary | ios::in);
if(plik1)
{
plik1.seekg(0, ios::end);
int rozmiar1 = (int)plik1.tellg();
plik1.seekg(0, ios::beg);
if(rozmiar1 > 0)
{
char* bufor1 = new char[rozmiar1];
plik1.read(bufor1, rozmiar1);
plik1.close();
ifstream plik2("plik2.txt", ios::binary | ios::in);
if(plik2)
{
plik2.seekg(0, ios::end);
int rozmiar2 = (int)plik2.tellg();
plik2.seekg(0, ios::beg);
if(rozmiar2 > 0)
{
char* bufor2 = new char[rozmiar2];
plik2.read(bufor2, rozmiar2);
plik2.close();
ofstream plik_wyjsc("plik_wyjsc.txt", ios::binary | ios::out);
if(plik_wyjsc)
{
plik_wyjsc.write(bufor1, rozmiar1);
plik_wyjsc.write(bufor2, rozmiar2);
cout << "\nUdalo sie polaczyc pliki! plik wyjsciowy > "plik_wyjsc.txt"";
}
else cout << "Nie mozna utworzyc pliku wyjsciowego!";
delete[] bufor2;
delete[] bufor1;
}
}
else cout << "\nNie mozna otworzyc pliku "plik2.txt"!";
}
}
else cout << "\nNie mozna otworzyc pliku "plik1.txt"!";

int stop;
cin >> stop;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1