Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben


  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.

Geschrieben

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.

Geschrieben

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?

Geschrieben

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

Geschrieben

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

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