Yo,
Ik ben bezig met een kleine oefening voor school en ik probeer daar excepties in te verwerken. Het concept v/d oefening is very basic :
1) Bron bestand wordt gevraagd
2) Doel bestand wordt gevraagd
3) Bron bestand inlezen
4) Bron kopieren naar nieuw doel bestand
Ik dacht hier een exceptie te throwen als
a) Het invoerbestand niet bestaat of niet geopend kan worden
b) Het uitvoerbestand niet aangemaakt / geopend kan worden
c) Niet het einde van het bestand werd bereikt bij het kopieren.
Is het al juist om te denken dat een uitvoer bestand eventueel niet geopend kan worden? Bvb door onvoldoende rechten? Is het type van de catch misschien niet correct?
Als ik foutieve invoer doe, bvb "a" en "b" dan kopieert hij niet , maar toont ook de excepties niet.
Hierbij al vast mijn code. De bestanden die ik open zitten voor het simpele testgegeven in de zelfde folder als de .cpp en .exe file.
link naar pastebin indien gemakkelijker : [C++] C++ - Pastebin.com
Code:
#include <iostream>
#include <fstream>
using namespace std;
void openBestanden(string bron_bestand, string doel_bestand,
ifstream & input_stream, ofstream & output_stream){
input_stream.open(bron_bestand.c_str());
if(!input_stream.is_open())
throw "Bronbestand " + bron_bestand + " kon niet worden geopend!";
output_stream.open(doel_bestand.c_str());
if(!output_stream.is_open())
throw "Doelbestand " + doel_bestand + " kon niet worden geopend!";
}
int main(){
string bron_bestand;
string doel_bestand;
ifstream input_stream;
ofstream output_stream;
cout << "Geef het bronbestand op : " << endl;
cin >> bron_bestand;
cout << endl << "Geef naam nieuw doelbestand op : " << endl;
cin >> doel_bestand;
cout << endl;
try{
// open de bestanden en streams
openBestanden(bron_bestand, doel_bestand, input_stream, output_stream);
string line;
int line_number = 1;
getline(input_stream,line);
while(!input_stream.fail()){
cout << "Lijn nummer " << line_number << " met inhoud '" << line << "' wordt gekopieerd .. " << endl;
output_stream << line << endl;
line_number++;
getline(input_stream,line);
}
if(!input_stream.eof())
throw "Het bronbestand kon niet helemaal gekopieerd worden .. ";
// close streams
input_stream.close();
output_stream.close();
}
catch(const char * ex){
cout << ex << endl;
}
catch(...){
}
system("pause");
return 0;
}
Thx!