[Solved] Memo speichern auf USB-Stick klappt nicht
-
Hallo,
ich habe ein Programm, welches auf einem USB-Stick laufen soll. Es hat eine config-Datei, die beim Start in ein Memo eingelesen wird. Dieses Memo kann man natürlich auch ändern und wieder abspeichern, allerdings klappt das nur, wenn ich das Programm auf der Platte habe. Scheinbar ist der USB-Stick zu langsam.
Ich mache beim Speichern folgendes:
AnsiString CFGPath; CFGPath=ExtractFilePath(Application->ExeName); strcat(CFGPath.c_str(),"config.cfg"); Memo1->Lines->SaveToFile(CFGPath);
Ist noch keine config.cfg vorhanden, klappt alles. Ist die Datei schon da, wird auch gespeichert, aber die Datei heisst dann z.B. "c03ł", ist aber lesbar und hat auch den richtigen Inhalt. Schliesse ich das Programm dann, bekomme ich "unbekannte Softwarefehler" rausgeworfen.
Auf Festplatte funktioniert wie gesagt alles ohne Fehler. Ich habe schon diverse Wartezeiten vor und nach dem Schreiben eingefügt, bis zu 10 Sekunden, ohne Auswirkungen. Ich hab auch die Windows-Einstellung für den USB-Stick (Performancemode <-> Sicherheitsmode) hin und her gewechselt.
Ich stehe auf dem Schlauch, kann mich mal jemand schubsen? Danke,
Nix
-
Nix schrieb:
AnsiString CFGPath; CFGPath=ExtractFilePath(Application->ExeName); strcat(CFGPath.c_str(),"config.cfg"); Memo1->Lines->SaveToFile(CFGPath);
Was meinst du, was passiert, wenn du mit strcat an einen String etwas anhängst, für dessen Speicherverwaltung du gar nicht verantwortlich bist?
Und warum einfach, wenns auch umständlich geht?
CFGPath += "config.cfg";
-
audacia schrieb:
Was meinst du, was passiert, wenn du mit strcat an einen String etwas anhängst, für dessen Speicherverwaltung du gar nicht verantwortlich bist?
Und warum einfach, wenns auch umständlich geht?
CFGPath += "config.cfg";
Ja, aber das ändert ja nix am eigentlichen Problem. Ich habe mir den kompletten String auch vor dem eigentlichen Speichern in einer MessageBox anzeigen lassen, dann ist er auch OK. Das Speichern danach geht aber schief.
mfG, Nix
-
Hallo
Dann liegt das Problem aber bestimmt nicht am VCL-Quellcode. Denn die VCL benutzt auch nur Windows-Mittel. Also hat Windows ein Problem mit deinem USB-Stick.
bis bald
akari
-
Nix schrieb:
geht aber schief.
Ich bin fast sicher, daß sowohl Windows (-> GetLastError()) als auch die VCL (-> Exception?) etwas spezifischer sind als "geht aber schief".
-
audacia schrieb:
Nix schrieb:
geht aber schief.
Ich bin fast sicher, daß sowohl Windows (-> GetLastError()) als auch die VCL (-> Exception?) etwas spezifischer sind als "geht aber schief".
Die Exception lautet "Unbekannter Softwarefehler" bzw. "unknown software exception", das hätte ich in meinem ersten Posting deutlicher schreiben sollen. Sie kommt beim Beenden des Programmes hoch, und zwar dreimal, aber nur wenn ich vorher versucht habe das Memo zu speichern.
GetLastError frage ich zweimal ab, einmal direkt nach dem Schreiben des Memos und einmal vor dem Schliessen des Programms. Beide Male bekomme ich "Der Vorgang wurde erfolgreich beendet". Obwohl die Datei mit falschem Namen abgespeichert wird.
mfG, Nix
-
akari schrieb:
Also hat Windows ein Problem mit deinem USB-Stick.
Das kann gut sein. Ich habe mir jetzt noch zwei andere Sticks besorgt, und jetzt tritt der Fehler reproduzierbar bei zwei von drei Sticks auf. Auf beide Sticks kann man aber problemlos mit normalen Copy-Funktionen jede Menge Dateien kopieren, überschreiben, löschen und wieder kopieren ohne das ein Fehler auftritt. Hmm...
mfG, Nix
-
Nix schrieb:
Die Exception lautet "Unbekannter Softwarefehler" bzw. "unknown software exception", das hätte ich in meinem ersten Posting deutlicher schreiben sollen. Sie kommt beim Beenden des Programmes hoch, und zwar dreimal, aber nur wenn ich vorher versucht habe das Memo zu speichern.
Dann enthält dein Programm noch mehr Code, der möglicherweise Speicherinhalt korrumpiert.
-
audacia schrieb:
Dann enthält dein Programm noch mehr Code, der möglicherweise Speicherinhalt korrumpiert.
Da hast Du Recht. Ich habe alle dieser weiter oben von Dir schon bemängelten String-"Un-Funktionen" geändert und der Fehler ist weg. Ich mache diese Sache jetzt schon ewig (falsch), und so ein USB-Stick muss mich dazu zwingen, das mal richtig zu machen.
Danke und mfG, Nix