Bestand kopieren

Status
Niet open voor verdere reacties.

wesselb

Gebruiker
Lid geworden
21 jan 2007
Berichten
38
Hoi,

Hoe moet ik een bestand in C++ kopieren. (exe)
Ik zoek wel een functie die niks wegschrijft in het DOS venster.
Dus niet: system("copy 1.exe 2.exe");

Ik heb zelf wat gemaakt, maar dit werkt ook niet?! (alleen bij exe's)
Waar zit de bug?

Code:
#include <fstream>
#include <string>
using namespace std;

bool copy_file(string from, string to) {
	string dat, inp, ck;
	ifstream _1 (from.c_str());
	if (_1.is_open()) {
		while (!_1.eof()) {
			getline(_1,dat);
			inp += dat + "\n";
		}
		for (float i=0;i<(inp.length()-1);i++) {
			ck += inp[i];
		}
		ofstream _2 (to.c_str());
		if (_2.is_open()) {
			_2 << ck;
			return true;
		} else
			return false;
		_2.close();
	} else
		return false;
	_1.close();
}
 
vreemd.. code lijkt me wel ok nochtans..

wel 2 kleine opmerkingen:

1. in je for-lus vergelijk je een float met een int, dit geeft een warning tijdens compilatie. best i als een integer declareren.

2. waarom de string (die je hele file bevat :shocked: ) eerst naar een c-string converteren ? Een filestream kan ook met stringobjecten overweg, bespaart je cpu, geheugen én code...

suggestie: ik zou de 2 streams nesten, zo kan je van de ene in een string lezen, en deze rechtstreeks weer uitschrijven, lijn per lijn je volledige document copiëren.
Conceptcode:
Code:
ifstream f1(from.c_str());
if (f1.is_open()) {
    string lijn;
    ofstream f2(to.c_str());
    if (f2.is_open()) {
        while (! f1.eof() ) {
            getline(f1, lijn);
            f2 << lijn << endl;
        }
        f2.close();
    } else {
        f1.close();
        return false;
    }
    f1.close();
} else
    return false;
return true;

--Johan
 
Okee, bedankt!

Ik heb het geprobeerd, maar het werkt even slecht als het eerste programma?!

Groetjes,
WesselB
 
Laatst bewerkt:
Dit werkt zeker wél op txtfiles neem ik aan?
Je moet je bestand in binaire mode openen en niet in ASCII.

gr Niek
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan