Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...