c++ kopiowanie pliku problem

pw1822
Użytkownik
Użytkownik
Posty: 20
Rejestracja: 21 paź 2006, o 11:53
Płeć: Kobieta
Lokalizacja: xyz
Podziękował: 2 razy

c++ kopiowanie pliku problem

Post autor: pw1822 »

Witam! Nie jestem zbyt zaawansowany jeśli chodzi o programowanie. Mój program wygląda następująco

Kod: Zaznacz cały

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

int main(){
    fstream plik, plik2;
    string nazwa1, nazwa2;
    cin >> nazwa1 >> nazwa2;
    plik.open(nazwa1.c_str(), ios::in | ios::out);
    plik2.open(nazwa2.c_str(), ios::in | ios::out | ios::trunc);
    while(!plik.eof()){
    plik2.put(plik.get());
                       }
    
    plik.close();
    plik2.close();
    }
No i mój problem wygląda następująco. Jeśli program ma skopiować zwykłe pliki tekstowe to działa bez zarzutu. Natomiast problem pojawia się gdy ma skopiować pliki np. bmp. Niektóre kopiuje bez problemu a niektóre ze tak powiem nie w całości tj. do ok 330go bajta. Kompletnie nie wiem dlaczego tak się dzieje. Wie ktoś może jak naprawić ten program aby zawsze kopiował dowolny plik do końca??
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

c++ kopiowanie pliku problem

Post autor: Fibik »

dorzuć flagę ios::binary.
Albo użyj CopyFile lub coś w tym stylu... zamiast się rozdrabniać i kopiować literki...
pw1822
Użytkownik
Użytkownik
Posty: 20
Rejestracja: 21 paź 2006, o 11:53
Płeć: Kobieta
Lokalizacja: xyz
Podziękował: 2 razy

c++ kopiowanie pliku problem

Post autor: pw1822 »

Fibik pisze:dorzuć flagę ios::binary.
Albo użyj CopyFile lub coś w tym stylu... zamiast się rozdrabniać i kopiować literki...
dodanie ios::binary nic nie zmienia niestety:(. Mógłbyś napisać coś więcej o tym poleceniu copyfile??
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

c++ kopiowanie pliku problem

Post autor: Fibik »

Musisz chyba użyć read/write zamiast get/put.

Kod: Zaznacz cały

#define B_SIZ  256

 char buf[B_SIZ];

 plik.open(nazwa1.c_str(), ios::in | ios::binary);
 plik2.open(nazwa2.c_str(), ios::out | ios::binary | ios::trunc);
 
 while( !plik.eof() ) {
      plik2.write(buf, plik.read(buf, B_SIZ).gcount());
   }

CopyFile to funkcja z sys. Windows.

#include <windows.h>

CopyFile(nazwa1.c_str(), nazwa2.c_str(), 0); // 0 == tranc,
ODPOWIEDZ