Prüfen auf die Existenz einer Datei



  • Hallo,
    ich teste in meinem Programm mit folgender Zeile, ob eine Datei existiert oder nicht:

    CFile Datei;
    if (Datei.Open(Dateiname,CFile::modeNoTruncate))
    {
      leseDateiaus();
      Datei.Close();
      Datei.Remove();
    }
    

    Im Debug Modus klappt dat prima, nur im Release Modus nicht. Da stürzt das Programm nämlich ab, nachdem das Programm einmal die Datei ausgelesen und gelöscht hat.

    Kennt jemand das Problem oder einen anderen Weg, wie man herausfindet, ob eine Datei existiert?



  • Hi OnkelHotte,

    mit der Funktion _access kannst ganz einfach überprüfen, ob die Datei existiert.

    #include "io.h"
    
    if( (_access( "MyFile", 0 )) != -1 )
    {
        //DoSomething
    }
    

    auf diese Weise kannst du auch prüfen, ob die Datei zum schreiben oder lesen geöffnet werden kann..

    Hoffe das hilft dir !

    Chris



  • Nö, bringt leider den gleichen Absturz. Er stürzt ab mit:
    Die Anweisung in "0x0040c0eb" verweist auf Speicher in "0x0256e400". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.

    Aber trotzdem danke für den Tip...



  • CFileFind itsFile;
    if (itsFile.FindFile("C:\\test.txt"))
    {
      ;
    }
    

    MfG



  • Nope, same here...



  • Du wolltest doch von uns wissen, wie man auf die Existenz der Datei prüfen kann ... genau das tun unsere Beiträge. Was für Fehler Dein restlicher Code produziert können wir ja so erstmal nicht sagen.





  • Ich glaube, das ist nicht sein Problem 🙄



  • Aber

    OnkelHotte schrieb:

    Kennt jemand das Problem oder einen anderen Weg, wie man herausfindet, ob eine Datei existiert?

    ... ?

    Gruß
    :: NoName ::



  • Little_Bird schrieb:

    Du wolltest doch von uns wissen, wie man auf die Existenz der Datei prüfen kann ... genau das tun unsere Beiträge. Was für Fehler Dein restlicher Code produziert können wir ja so erstmal nicht sagen.

    Ja, dass diese Funktionen das alles machen, was ich will, ist schon klar. Aber genau dann, wenn er eine Datei bereits gelöscht hat und dann beim nächsten Aufruf wieder überprüfen will stürzt der immer in der if Abfrage ab, nicht vorher, nicht später.

    Das PathFileExists krieg ich übrigens nich gebacken. Ich binde zwar die Header ein, der Linker moniert trotzdem ein Nichtaufgeloestes externes Symbol __imp__PathFileExistsA@4

    Egal, dann lass ich das Programm im Debug Modus laufen. Ist zwar langsamer, aber es funktioniert 😉



  • Hast du die Header und Lib genau so bei dir eingetragen :

    #include "shlwapi.h"
    #pragma comment(lib, "shlwapi.lib")
    

    ???

    Onkel Hotte schrieb:

    Egal, dann lass ich das Programm im Debug Modus laufen. Ist zwar langsamer, aber es funktioniert

    Aber leider kannst du dann die Debug-Exe nur auf deinem Computer ausführen.
    Du brauchst schon ne' Release damit sie auf anderen Computer funktioniert...

    Gruß
    :: NoName ::



  • Egal, dann lass ich das Programm im Debug Modus laufen. Ist zwar langsamer, aber es funktioniert

    lol, bist du dumm?



  • Kann es sein, dass du einige Compiler-Warnungen übersiehst?

    Vielleicht ist die Datei noch offen oder so. Überprüf mal deinen Code.

    MfG



  • Anscheinend bin ich dann zu dumm 😕
    Die Datei ist nicht mehr offen, ich schliesse sie immer, wenn sie geöffnet werden kann. Beim generieren hab ich keine einzige Warnung.

    Mit dem PathFileExists geht es übrigens auch nicht. Aber trotzdem danke für Hilfe.



  • OnkelHotte schrieb:

    Mit dem PathFileExists geht es übrigens auch nicht. Aber trotzdem danke für Hilfe.

    Der ganze Thread liest sich in etwa so, als ob du versucht, einen Nagel in eine Glasscheibe einzuschlagen. Weil das nicht klappt, nimmst du einen anderen Hammer. Und noch einen. Und noch einen.

    Sieh ein: Es liegt nicht am Hammer.

    Du hast einen Bug in deinem Code. Du solltest aufhören zu versuchen, um diesen Bug drumherum zu programmieren, sondern ihn beheben.



  • MFK schrieb:

    Der ganze Thread liest sich in etwa so, als ob du versucht, einen Nagel in eine Glasscheibe einzuschlagen. Weil das nicht klappt, nimmst du einen anderen Hammer. Und noch einen. Und noch einen.

    Sieh ein: Es liegt nicht am Hammer.

    Du hast einen Bug in deinem Code. Du solltest aufhören zu versuchen, um diesen Bug drumherum zu programmieren, sondern ihn beheben.

    Hab nun die Glasscheibe gegen ein Brett ausgetauscht 🙄
    Es lag daran, dass ich in der Funktion noch zusätzlich mit einem FILE* gearbeitet habe, weil ich mit fgets usw. die Datei ausgelesen habe. Das CFile Objekt hatte ich vorher zwar geschlossen, aber das wollte dann trtotzdem irgendwie nicht. Hab das ganze jetzt mit einem CStdioFile gemacht und meine Ausleseroutine umgeändert; alles lüppt jetzt auch im Release Mode.

    Trotzdem nochmal danke für eure Geduld und Tips 👍



  • uups - hat sich erledigt 🙂


Anmelden zum Antworten