aLeXanDer.. Geschrieben 14. November 2007 Geschrieben 14. November 2007 Hallo, Habe wieder ein Problem das mich beschäftigt. Bin noch immer dabei mein Programm zu verfeinern. Habe jetzt eingebaut das, in einem Label der Dateipfad angegeben wird von wo die Dateien stammen , die in der Listbox angezeigt werden. Mit einem Klick auf das Label lasse ich einen OpenDialog sich öffnen. In diesem kann der Benutzer dann ein anderes Verzeichnis wählen. Habe das so gelöst , das er auf eine Datei klicken muss, dann lösche ich den DAteinamen weg, so das in Label nur das Verzeichnis angezeigt wird und lasse dieses dann mit einer Schleife nach einem bestimmten Dateityp durchsuchen und in der Listbox ausgeben. Nun ich möchte nun , den Pfad, der in das Label übertragen wird, in eine Dateispeichern, um beim nächsten Start zu sagen, das im Label die/der Adresse/Pfad angezeigt werden soll, die zuletzt abgespeichert worden ist. OpenDialog1->Title = "Verzeichnis auswählen"; OpenDialog1->Filter = "CFG Dateien (*.CFG) | *.cfg"; //Dateiauswahl beschränken OpenDialog1->InitialDir = "C:\\Programme\\Gemeinsame Dateien\\Borland Shared\\BDE"; //Standartverzeichnis, soll durch Labeldatei ersetzt werden AnsiString FileName; if(OpenDialog1->Execute()) { FileName = OpenDialog1->FileName; FileName = FileName.SubString(1, FileName.Pos(ExtractFileName(FileName))-1); //Schneidet den Dateinamen vom Pfad weg Label1->Caption = FileName; //Pfad wird im Label ausgegebn //Label1->Caption->SaveToFile (FileName + "Pfad.ini"); [COLOR="Cyan"]meine Ansätze[/COLOR] //SaveToFile(*FileName + "Pfad.ini"); ListBox1->Clear(); // Alte Anzeige in der Listbox wird gelöscht und neue darauf eingespeist Mfg Alex Zitieren
aLeXanDer.. Geschrieben 14. November 2007 Autor Geschrieben 14. November 2007 FileName = FileName + "Pfad.ini"; ofstream Datei; Datei.open(FileName.c_str()); Datei.write(FileName.c_str(),1); Datei.close(); Hab selber eine Lösung gefunden. Tut mir Leid, aber vorher bin ich nicht darauf gekommen. Zitieren
Klotzkopp Geschrieben 14. November 2007 Geschrieben 14. November 2007 Damit schreibst du nur das erste Zeichen des Dateinamens selbst in die Datei. ofstream Datei(FileName.c_str()); Datei << Label1->Caption.c_str();[/code] Open kannst du dir sparen, das kann auch der ofstream-Konstruktor. Und close brauchst du auch nicht, das passiert automatisch, wenn der Scope des Streamobjekts endet. Zitieren
aLeXanDer.. Geschrieben 14. November 2007 Autor Geschrieben 14. November 2007 Habe ich nach meiner Euphorie , das die Datei abgespeichert wird auch festgestellt , nachdem ich sie geöffnet habe Zitieren
aLeXanDer.. Geschrieben 14. November 2007 Autor Geschrieben 14. November 2007 Jetzt hab ich gemerkt, dass ich immernoch ein Problem habe. Ich habe nur einen Dateinamen angegeben unter den die Datei abgespeichert werden soll if(OpenDialog1->Execute()) { FileName = OpenDialog1->FileName; FileName = FileName.SubString(1, FileName.Pos(ExtractFileName(FileName))-2); //Schneidet den Dateinamen vom Pfad weg Label1->Caption = FileName; //Pfad wird im Label ausgegebn PfadName = [COLOR="#ff0000"]"Pfad.txt"[/COLOR]; ofstream Datei (PfadName.c_str()); Datei << Label1->Caption.c_str(); ListBox1->Clear(); // Alte Anzeige in der Listbox wird gelöscht Ich möchte aber das, dass Programm weiß, welche Daten sie beim letzten Ausführen, woher hat. Beim Programmstart frage ich daher ab. Wenn die Datei in die ich speichere existiert , soll er sie auslesen und diesen Pfad, der darin abgespeichert ist, nehmen. Wenn nicht, dann den Standardpfad -> C:\... if (FileExists("Pfad.txt")) { ifstream Dateiladen; Dateiladen.open ("Pfad.txt"); Dateiladen >> Label1->Caption.c_str(); } else Label1->Caption = "C:\\Programme\\Gemeinsame Dateien\\Borland Shared\\BDE"; Nur das klappt nicht. Beim nächsten Aufrufen startet er aber wieder im Standardverzeichnis. Die Datei wird immer in dem Verzeichnis gespeichert, aus dem ich die Daten hole. Habt ihr eine Lösungsidee? Zitieren
aLeXanDer.. Geschrieben 14. November 2007 Autor Geschrieben 14. November 2007 Da ist schon mal ein Fehler bei dem ifstream Dateiladen, Dateiladen >> Label1->Caption.c_str() ist falsch. Habe jetzt Dateiladen.open ("Pfad.txt", ios::in) Das Problem das er mir die Datei nicht in das EXE Verzeichnis besteht immernoch. Und hier ist jetzt das Problem, obwohl ich die Datei in den richtigen Ordner reinkopiert habe wo er sie normal abfrägt, als Antowrt von meinem Programm bekommen , das keine Daten vorhanden sind. Also bin ich mir auch nicht sicher ob das mit dem ios::in richtig ist Zitieren
aLeXanDer.. Geschrieben 14. November 2007 Autor Geschrieben 14. November 2007 Für die Nachwelt =) Habe das mit dem of und ifstream wieder sein gelassen und stattdessen eine TStringBox erstellt. Das mit dem Streams wollte bei mir nicht gehen. TStringBox ist aber eine schöne Alternative und nicht sehr schwer. Das Problem mit dem speichern , dass der OpenDialog verursacht habe ich auch gelöst. Habe mir vor dem OpenDialog die aktuelle Adresse gespeichert mit GetCurrentDir(); und vor dem Abspeichern, dass in dem OpenDialog geschieht wieder gesetzt mit SetCurrentDir(); Mfg Alex Zitieren
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.