Zum Inhalt springen

[C++.NET] Probleme beim Speichern/Lesen


Royal_Flush

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...