Datei einlesen Fehlermeldung bei falscher Datei
-
Hallo,
Ich habe folgendes Problem:
Mein Programm funktioniert fehlerfrei, wenn man die Richtige Datei zum lesen angibt. Tut man dieses jedoch nicht stürzt es ab. Die Endung "*.lbl" habe ich schon fest vorgegeben, aber leider gibt es solche und solche .lbl- Datein. Kann ich irgendwie kontrollieren, ob die gewählte Datei zulässig ist?CStdioFile Datei; if (Datei.Open(m_pathname, CFile::modeRead)) { CString Zeile; while (Datei.ReadString(Zeile)) { ////////////////////// //Zerlegen der Zeile// ////////////////////// SStuhl m_cTempStuhl; // Container für Stühle m_cTempStuhl.Startdatum =atoi(Zeile.Mid(0 ,8 )); m_cTempStuhl.Endedatum =atoi(Zeile.Mid(8 ,8 )); : : m_cStuhl.push_back(m_cTempStuhl); //In den Container übergeben } Datei.Close(); }
-
dazu müsstest du erstmal festlegen was eine "zulässige" datei ausmacht
-
Ups, ja in der Richtung wären wohl noch ein paar Infos wichtig, Tschuldigung.
zulässig ist, wenn die Zeilen der Datei so aufgebaut sind wie ich sie erwarte
in der Richtigen Datei fängt jede Zeile mit 2 Data anso: 1401200425012004..........
-
einfach ne zusätzliche funktion die den inhalt des contailers nach dem einlesen prüft und falls es nich in ordnung is machts den container leer und bringt ne fehlermeldung
oder hab ich was falsch verstanden?
-
glaub nicht. Mich hat es halt nur gewundert, dass mein Programm immer abstürzt. Naja, werds mal ausprobieren und geb dann wieder bescheid. Kann aber ein bißchen dauern (Anfänger).
Danke
-
Servus,
du kannst das ganze auch je nachdem was für eine Fehlermeldung kommt mit Try und Catch abfangen..
BSP:
void CDeineKlasse::LeseDatei() { try { leseleseleseleselese; } catch(CFileException *e) { AfxMessageBox("Hier stopp halt, falsche Datei!!"); } }Ein Prob gibs bei der Sache. Wenn nun ein Lesefehler auftritt sagt er dir auch das du eine falsche Datei ausgewählt hast *g*. Kannst aber auch die Fehlermeldung mit dem 'e' auswerten. Dazu findest du in der MSDN unter Exceptionhandling etwas. Ich meine da war was. Ansonsten nach CFileException suchen dann findest du auch was...
viel spass
*winke*
Hellsgore
-
So, jetzt bekomme ich wenigstens ne Fehlermeldung bevor er abstürtzt.
Und ich hab auch schon ein paar Ideen.CStdioFile Datei; if (Datei.Open(m_pathname, CFile::modeRead)) { CString Zeile; while (Datei.ReadString(Zeile)) { //+-------------------------------------------------------------+ //+ Zerlegen der Zeile + //+-------------------------------------------------------------+ SStuhl m_cTempStuhl; // Container für Stühle //+-------------------------------------------------------------+ //+ Kontrolle anhand ersten Datums, ob Datei korrekt + //+-------------------------------------------------------------+ CString Kontrolle= Zeile.Mid(0 ,8 ); for (int i=0; i<8; i++) { if ((Kontrolle[i]>57) ||(Kontrolle[i]<48)) { AfxMessageBox("Sie haben eine leere, oder nicht zulässige Datei ausgesucht.\nBitte wählen Sie eine andere Datei aus."); } } m_cTempStuhl.Startdatum =atoi(Kontrolle); m_cTempStuhl.Endedatum =atoi(Zeile.Mid(8 ,8 ));an Hellsgore: Habs probiert, bin aber noch zu dusselig dafür. Ich werde es mir auf jeden Fall merken und später mal richtig nachschauen.
Danke
-
CStdioFile Datei; if (Datei.Open(m_pathname, CFile::modeRead)) { CString Zeile; int korrekt=0; //Wenn die Datei nicht richtig ist korrekt=1 while (Datei.ReadString(Zeile)) { //+-------------------------------------------------------------+ //+ Zerlegen der Zeile + //+-------------------------------------------------------------+ SStuhl m_cTempStuhl; // Container für Stühle //+-------------------------------------------------------------+ //+ Kontrolle anhand ersten Datums, ob Datei korrekt + //+-------------------------------------------------------------+ CString Kontrolle= Zeile.Mid(0 ,8 ); for (int i=0; i<8; i++) { if ((Kontrolle[i]>57) ||(Kontrolle[i]<48)) { korrekt=1; } } if (korrekt==1) { AfxMessageBox("Sie haben eine leere, oder nicht zulässige Datei ausgesucht.\nBitte wählen Sie eine andere Datei aus."); break; } m_cTempStuhl.Startdatum =atoi(Kontrolle);

sicher! Schön ist es nicht, aber es funktioniert.