[c++] Dateien mit fstream kopieren?

darrell

Grünschnabel
Tach @ all,

Ich hab unter LINUX ein kleines Programm geschrieben, das datein einlesen und mit eventl. anderem Namen wieder ausgeben soll ( vergleichbar mit cpy ).

Funktioniert soweit auch (bei txt zb).
Wenn ich aber mp3 Datein "kopieren" will dann macht er auch eine Kopie, die aber
nicht abgespielt werden kann.
Fehler:
Code:
Konnte die Art des Datenstroms nicht ermitteln.

Warum nicht einfach die systemfunkion "cpy" verwenden ?
...Das Programm soll in etwas abgewandter Form noch für Dateiübertragung mit sockets dienen.

Was mache ich falsch?
THX FÜR EURE HILFE

Hier der Programmcode :
Code:
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[])
{
	//check parameters
	if ( argv[2] == NULL )
	{
		cerr << "1.source, 2.dest" << endl;
		return 1;
	}
	
	//declare...
	char* buf;
	ifstream in;
	ofstream out;
	
	//open streams (binary)
 	in.open(argv[1], ios_base::in | ios_base::binary);
 	if ( !in )
 	{
 		cerr << "ERROR ==> file dosent exist " << endl;
 		return 1;
 	}
 	
	out.open(argv[2], ios_base::out | ios_base::binary);
	if ( !out )
	{
		cerr << "ERROR ==> cant write to file" << endl;
		return 1;
	}
	
	//get size
	in.seekg(0, ios_base::end); 		
	const unsigned long file_size = in.tellg();
	in.seekg(0, ios_base::beg);					//set read_pointer
												//to begin of the stream
	//allocate memory(HEAP) we need
	buf = new char[file_size];
	
	//copy streams
	while (in.getline(buf, file_size, '\n') && !in.eof() )
    { 
    	out << buf << endl;
    }
	
	//kill streams 
	in.close();
	out.close();
	
	return 0;
}
 
Hallo,

also bei binären Dateien mit "getline()" zu arbeiten und dann beim Schreiben auch noch "endl" dazuschummeln, erzeugt ganz sicher keine identische Kopie :-)
In diesen Fall einfach nur die read/write - Methoden benutzen:
C++:
in.read (buf, file_size);
in.close();
out.write(buf, file_size);
out.close();
Gruß
MCoder
 
Zurück