Połączenie podzielonych plików

0

Witam, znalazłem prosty program do dzielenia plików, jeśli chce połączyć pliki jest plik laczenie.bat

i w niej funkcja do łącznia:

copy /b "plik1" + "plik2"  "polaczonePliki" 

jak to napisac w C++ aby połączył plik plik1 i plik2 w całość z możliwościa odczytu (załadowania do aplikacji ?) go w tej samej aplikacjii, ktora bedzie łączyła. (pliki łaczone nie sa tekstem .txt itd)

0

ifstream, ofstream

0

cos takiego ? bo probowałem zapis do pliku i zapisuj tylko 0.

    
    std::ofstream output;
    std::ifstream fp_in ("plik1");
        if( fp_in.fail() )
        {
            cout << "fail load plik1\n";
            system("pause");
            return 0;
        }


    std::ifstream fp_in2 ("plik2");
        if( fp_in2.fail() )
        {
            cout << "fail load plik2\n";
            system("pause");
            return 0;
        }

    output << fp_in << fp_in2;

    std::ofstream xSave("saveFile");
    xSave<< output;
 
0

Otwierać wszystko w trybie binarnym, wczytywać do bufora (ewentualnie buforem jest jeden znak).

0

dalej mi zapisuje w pliku "0"

   
std::ofstream output;

    std::ifstream fp_in("file1",ios::binary);
        if( fp_in.fail() )
        {
            cout << "fail load file1 \n";
            system("pause");
            return 0;
        }

    std::ifstream fp_in2("file2",ios::binary);
        if( fp_in2.fail() )
        {
            cout << "fail load file2 \n";
            system("pause");
            return 0;
        }

    std::ifstream fp_in3("file3",ios::binary);
        if( fp_in3.fail() )
        {
            cout << "fail load file3 \n";
            system("pause");
            return 0;
        }
    output << fp_in << fp_in2 << fp_in3;

    std::ofstream xSave("saveFile", ios::binary);
    xSave << output;

chyba ze tu cos mam dodac:

 output << fp_in << fp_in2 << fp_in3;
0
system("copy /b plik1+plik2 polaczonePliki");

:P

0
Azarien napisał(a):
system("copy /b plik1+plik2 polaczonePliki");

:P

jak teraz to odczytac ? zeby nie tworzylo pliku a zapisywalo w buforze

zrobiłem to tak:

ifstream ifs("file1", ios::binary); // otwieramy plik do odczytu binarnego
ifstream ifs2("file2", ios::binary); // otwieramy plik do odczytu binarnego
ifstream ifs3("file3", ios::binary); // otwieramy plik do odczytu binarnego
ofstream ofs("fileSSave", ios::binary); // otwieramy plik do zapisu binarnego

 //char temp[100]; // tymczasowy bufor na dane

  // get size of file
  ifs.seekg (0,ifs.end);
  long size = ifs.tellg();
  ifs.seekg (0);

  ifs2.seekg (0,ifs2.end);
  long size2 = ifs2.tellg();
  ifs2.seekg (0);

  ifs3.seekg (0,ifs3.end);
  long size3 = ifs3.tellg();
  ifs3.seekg (0);

  long allSize = size+size2+size3;

  // allocate memory for file content
  char* buffer = new char[allSize];

  // read content of infile
    ifs3.read(buffer,size3);
    ifs2.read(buffer,size2);
    ifs.read(buffer,size);
  // write to outfile
  ofs.write (buffer,allSize);

 system("pause");

niby zapisuje sie (scala) ale plik jest inny (otwierałem w notepad++ i cos tam sie pozmieniało, no początek jest ok a na końcu juz jakis inne znaczki pokazuje i plik staje sie nieczytelny dla aplikacji)

zmieniałem kolejność odczytu

    ifs3.read(buffer,size3);
    ifs2.read(buffer,size2);
    ifs.read(buffer,size);

robiłem tez test czy zapisuje plik jeden i działa poprawnie np:

 
////
 long allSize = size;
////   
    //ifs2.read(buffer,size3);
   // ifs2.read(buffer,size2);
    ifs.read(buffer,size);
1
    ifs.read(buffer,size);
    ifs2.read(buffer+size,size2);
    ifs3.read(buffer+size+size2,size3);
0

dzieki, wszytko działa poprawnie!

0

Można to zrobić ładniej:

string x=((stringstream&)(stringstream(ios::binary|ios::out)<<ifstream("file1",ios::binary).rdbuf()<<ifstream("file2",ios::binary).rdbuf()<<ifstream("file3",ios::binary).rdbuf())).str();

postać bardziej rozpisana:

   stringstream s(ios::binary|ios::out);
   s
      <<ifstream("file1",ios::binary).rdbuf()
      <<ifstream("file2",ios::binary).rdbuf()
      <<ifstream("file3",ios::binary).rdbuf()
     ;
   string x=s.str();

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