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