exception bei wxFile::Read
-
hallo,
ich habe von einer beschädigten festplatte mit file scavenger dateien wiederhergestellt. von den hergestellten 6200 datei muss ich eine finden, die mit einem string in den ersten 20 bytes beginnt. das mache ich folgendermaßen:
wxString filename; wxString pathAndName; wxFile fl; char buffer[22]; bool cont = dir.GetFirst(&filename); while ( cont ) { OutputDebugString(filename + _("\n")); pathAndName = dirPath + _("\\") + filename; if(!fl.Open(pathAndName)){ OutputDebugString(_("konnte datei nicht öffnen\n")); cont = dir.GetNext(&filename); continue; } fl.Read(buffer, 21); //OutputDebugString(_("\t") + stringPasToWx(buffer) + _("\n")); fl.Close(); cont = dir.GetNext(&filename); }
ich habe eine datei als erste im verzeichnis eingefügt, die nicht von der wiederhergestellten festplatte kommt, bei der funktioniert das problemlos.
doch dann kommt der fehler:Eine Ausnahme (erste Chance) bei 0x750fc41f in bndSuchen.exe: Microsoft C++-Ausnahme: std::length_error an Speicherposition 0x0021ee38.. Eine Ausnahme (erste Chance) bei 0x750fc41f in bndSuchen.exe: Microsoft C++-Ausnahme: [rethrow] an Speicherposition 0x00000000.. Das Programm "[6440] bndSuchen.exe: Systemeigen" wurde mit Code -1 (0xffffffff) beendet.
woran könnte das liegen?
hier eine der wiederhergestellten dateien:
http://gemini-sites.de/Unknown000001.bnddanke!
-
ääääh, ok, hat sich erledigt...
das erstellen des strings aus dem char[] mit folgender funktion geht nicht:
wxString stringPasToWx(const char *pas) { wxString result; result.Alloc(pas[0]); for(int i = 0; i < pas[0]; i++) { result += pas[i + 1]; } return result; }
aber mit wxString mystring2(buffer, wxConvUTF8); geht es.