Kopiowanie pliku

0

Mam problem z kopiowaniem pliku w MSVC++ 6.0. Mam taki kod:

#include<fstream.h>

void main()
{ short znak;
ifstream in( "in.txt" , ios::binary | ios::in );
ofstream out( "out.txt" , ios::binary | ios::out );

 while( ( znak = in.get() ) != EOF ) out.put( znak );
 in.close();
 out.close();

}

Przy kompilacji wyskakuje blad:
C:\Pulpit\TEST\AAA.CPP(8) : error C2668: 'put' : ambiguous call to overloaded function

O co chodzi? Dodam ze w Borland C++ 3.1 wszystko jest OK, ale musi dzialac w MSVC++ b na uczelni takiego uzywam.
Jak inaczej mozna skopiowac plik?

0

Witam.

Mozesz zrobic tak:

[code]

  1. include <iostream.h>
  2. include <fstream.h>

void main()
{
char znak;

ifstream odczyt("in.txt", ios::binary | ios::in);
ofstream zapis("out.txt", ios::binary | ios::out);

do
{
	if (odczyt.get(znak))
		zapis.put(znak);

} while (!odczyt.eof());

zapis.close();
odczyt.close();

cout << "Powstala kopia pliku" << endl;

}
[/code]

http://www.keywords.prv.pl

0

Cinek : to chyba nie pomoze
nie uzywaj :: put, tyko wsadzaj znaki poprzez out<<znak;
powinno nie miec problemow

0

Witam.

markoot : Jak to nie pomoze? Przeciez dziala ;-).

Pozdrawiam.

http://www.keywords.prv.pl

0

Można i tak kopiować :

int main(int argc, char* argv[])
{
ifstream in( "in.txt" , ios::binary | ios::in );
ofstream out( "out.txt" , ios::binary | ios::out );
if (!in || !out) return EXIT_FAILURE;
out << in.rdbuf();
return EXIT_SUCCESS;
}

0

cinek: dalej ten sam blad
markoot: nie dziala jak trzeba, zapisuje do pliku jakies liczby
chodek: kopiowanie musi sie odbywac bajt po bajcie bo poza odczytaniem musi szyfrowac, a dopiero potem zapisac

Ale dzieki za odpowiedzi!

0

Skoro nie potrafisz sobie poradzić ze strumieniami, to może zacznij troszke niżej, od FILE-ów.

#include <io.h>
#include <stdlib.h>

#define bufsize 8192

main(){
  FILE* fs=fopen("source.dat","rb");
  FILE* fd=fopen("destination.dat","w+b");
  char buffer[bufsize];
  long l=filelength(fileno(fs));
  while(l){
    long i=bufsize;
    if(i>l)i=l;
    l-=i;
    fread(buffer,i,1,fs);
    fwrite(buffer,i,1,fd);
  }
  fclose(fd);
  fclose(fs);
}

Bez obsługi błedów, ale to nie jest trudno samemu dorobić...

0

Hmm zmien sobie w tym kodziku jedno :D

#include<fstream.h>

na
#include <fstream>
i powinno śmigać.

0

bajtek: to zrob tak jak Ci napisal chodek, tylko dodaj jeszcze ta linijke:
[code]using namespace std;[/code].

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