Problem mit speichern / laden einer datei



  • Hallo
    ich habe ein mfc-sdi projekt, wo ich mehrere dateien speichern/laden muss.
    Das mache ich mit CFile. Eine Datei speichere/lade ich mit relativer Pfad, eine andere mit absolutem.
    Wenn ich aber die mit dem absoluten pfad lade und speichert das programm meine datei (mit dem relativen Pfad) im gleichen Ordner 😮 😕 😮 😕

    Mein code:

    (1)

    //Datei öffnen
    CFile file;
    file.Open("txt.rec",CFile::modeRead);
    
    //Datei lesen und schließen
    TCHAR tstr[3000];
    file.Read(tstr,sizeof(tstr));
    CString str(tstr);
    str=str.Left(file.GetLength());
    file.Close();
    //...String auswerten
    }
    

    -->klappt gut, lade nun ander datei

    (2)

    TCHAR tstr[100000];
    
    //Datei laden
    CFile f;
    f.Open("C:\Dokumente und Einstellungen\Admin\Desktop\temp.txt",CFile::modeRead);
    
    //Auslesen
    f.Read(tstr,sizeof(tstr));
    CString txt(tstr);
    f.Close();
    //...Verarbeiten
    

    -->klappt auch, bloß wenn ich jetz wieder (1) aufrufe sucht er nicht im verzeichnis wo mein prog liegt sondern in "C:\Dokumente und Einstellungen\Admin\Desktop\" 😮

    Was mache ich falsch, was kann ich tun?? 😞
    Ich habe keine ahnung woran es liegt, wenn ihr mehr code / infos braucht sagt bescheid.

    gruß DR



  • Gib einen absoluten Pfad bei (1) an 😉



  • 😉 na toll,
    geht das auch noch anders, ich will die datei ja in dem verzeichnis haben wo das programm installiert wird -> und das kenne ich ja nicht



  • Das kannst du dir aber holen... davon mal abgesehen ist die Datei auch nicht unbedingt in dem Verzeichnis deiner exe, da dieser Pfad nicht unbedingt das momentane Arbeitsverzeichnis sein muss. D.h. empfielt es sich, sich den Pfad der exe zu holen und dann daran den Dateinamen zu hängen ...


  • Mod

    BTW: Der Code ist suboptimal. Du kannst direkt den Speicher im CString allokieren.

    CFile file; 
    file.Open("txt.rec",CFile::modeRead); 
    
    //Datei lesen und schließen 
    CString str; 
    int iLength = file.GetLength();
    file.Read(str.GetBufferSetLength(iLength),iLength); 
    file.Close();
    


  • Vielen Dank 😃 😃



  • So wie du das geschrieben hast (Codebeispiel) wird das genannte Verhalten nicht auftreten -- d.h. er wird auch nach (2) bei Aufruf von (1) noch im selben Verzeichnis wie vorher suchen. Ich schätze mal du verwendest nen File Dialog zum öffnen der 2. Datei (genauer: zum Bestimmen des Pfades) - und so ein File Dialog hat eben die Eigenschaft das "current directory" zu verändern. Daher sucht der dann natürlich woanders.



  • Ja das stimmt, das ganze is bei mir auch noch n bisschen komplizierter, habe das beispiel nur auf das wesentliche reduziert, hab das problem mit eurer hilfe gelöst, auch vielen dank an martin richter für den tip mit dem cstring.
    gruß dr


Log in to reply