# [c++] Dateien mit fstream kopieren?



## darrell (17. November 2007)

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:

```
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 : 

```
#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;
}
```


----------



## MCoder (17. November 2007)

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:

```
in.read (buf, file_size);
in.close();
out.write(buf, file_size);
out.close();
```
Gruß
MCoder


----------



## darrell (17. November 2007)

OK! 
vielen dank für deine hilfe

gruss darrell


----------

