Royal_Flush Geschrieben 4. April 2009 Teilen Geschrieben 4. April 2009 Hallo, ich hätte mal eine Frage: Ich versuche, einen Pfad, der in einem FolderBrowserDialog ausgewählt wurde in eine Datei zu speichern, um ihn dann auch bei erneuter Ausführung des Programms als Standardverzeichnis zu haben. Der Code zum Speichern scheint zu funktionieren (Zumindest gibt es keine Fehlermeldung): //Bei Klick auf OK if (Speicherort->ShowDialog()==::DialogResult::OK) { //Pufferüberlauf? if (Speicherort->SelectedPath->Length<900) { //Pfad übernehmen Path=Speicherort->SelectedPath; //Standardpfad? if (MessageBox::Show("Möchten Sie diesen Pfad als Standard speichern?", "Frage", System::Windows::Forms::MessageBoxButtons::YesNo, System::Windows::Forms::MessageBoxIcon::Information) == ::DialogResult::Yes) { //Wenn ja, dann speichern: //ohne das funktioniert das Speichern nicht... System::String^ StringOut=Path; //in Datei schreiben ofstream of("Primzahlenrechner.opt", ios::binary); of.write ((char*) &StringOut, sizeof(StringOut)); of.close(); bStd=true; } else { bStd=false; } } else { MessageBox::Show ("Speicherpfad zu lang!", "Fehler!", MessageBoxButtons::OK, MessageBoxIcon::Error ); } Den String IO habe ich erstellt, weil beim Versuch, es direkt mit Path, welcher am Anfang der Klasse Form1 erstellt wurde, zu machen, eine Fehlermeldung kommt, dass die Konvertierung von System::String^ nach char* nicht möglich sei. Das Auslesen des Pfades will ich direkt vorm Speichern machen: void Speichern () { //Variablen char Name [1000]; //Dateiname System::String^ IO; string sAnzahl=AnzahlErzeugen(); //Letzte Zeile //Soll es im Standardverzeichnis erstellt werden? if (bStd==true) { //Spiecherpfad aus Datei auslesen: ifstream in ("Primzahlenrechner.opt", ios::binary); //gibts die Datei überhaupt? if (in!=NULL) { //Dann auslesen: in.read((char*)&IO, sizeof(IO)); in.close(); //Übernehmen: MessageBox::Show(Path);//Dient nur dazu, mir den Inhalt zu zeigen } } //Dateinamen erzeugen sprintf (Name, "%s\\Primzahlen %i-%i.txt", Path, ZahlStart, ZahlEnd); //[Hier wird das Ergebnis in die Datei geschrieben, aber da liegt der Fehler nicht...] Wenn ich das ausführe, bevor ich einen neuen Pfad im Pfaddialog ausgewählt habe, erscheint folgende Fehlermeldung: Eine nicht behandelte Ausnahme des Typs "System.AccessViolationException" ist in System.Windows.Forms.dll aufgetreten. Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist. Mich würden jetzt zwei Sachen interessieren: 1. Was bedeutet diese Fehlermeldung, bzw. was kann man dagegen machen? 2. Warum kann man System::String^ Path nicht in einen char-Zeiger konvertieren, System::String^ IO / StringOut aber schon? Ich benutze Microsoft Visual C++ 2008 Express und das ganze ist eine Windows Forms Anwendung. Gruß Royal_Flush Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.