Datei vorhanden



  • Hi, ich muss überprüfen, ob eine Datei vorhanden ist. Reicht nur fopen() aus, oder sollte ich lieber eine Funktion schreiben mit fopen und fclose? Oder gibt es da noch einen besseren Weg mit anderem Ansi C oder sogar WinAPI?



  • datei schrieb:

    Hi, ich muss überprüfen, ob eine Datei vorhanden ist. Reicht nur fopen() aus, oder sollte ich lieber eine Funktion schreiben mit fopen und fclose? Oder gibt es da noch einen besseren Weg mit anderem Ansi C oder sogar WinAPI?

    Es gibt kein "anderes" ANSI-C. Und hier gibt es keine Win- API. 😃
    Bitte unbedingt wieder closen, sonst bleiben locks stehen und Du müllst Dir den Speicher und das System mit offnen Handles zu. Das willst Du doch nicht, oder? 😉



  • Ok danke!



  • STAT(2) Linux Programmer's Manual STAT(2)

    NAME
    stat, fstat, lstat - get file status

    SYNOPSIS
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>

    int stat(const char *path, struct stat *buf);
    int fstat(int filedes, struct stat *buf);
    int lstat(const char *path, struct stat *buf);

    DESCRIPTION
    These functions return information about a file. No permissions are
    required on the file itself, but -- in the case of stat() and lstat()
    -- execute (search) permission is required on all of the directories in
    path that lead to the file.

    stat() stats the file pointed to by path and fills in buf.



  • Oder gibt es da noch einen besseren Weg mit anderem Ansi C oder sogar WinAPI?

    Ich würde das OS bemühen. Was, wenn die Datei zwar da ist, aber du einfach nicht von dort lesen darfst? Oder willst du ohnehin nur prüfen, ob du von dort lesen kannst, und nicht ob die Datei wirklich da ist? Jedenfalls hat C von solchen Fragen keine Ahnung, C kann nur versuchen zu lesen und das war's dann auch.



  • Ich weiß es ist unverschämt, aber falls es nicht zwingend C sein muss, würde ich dir boost::filesystem raten:
    http://www.highscore.de/cpp/boost/dateisystem.html



  • wenn c lesen kann, dann darf c auch lesen. 😃



  • datei schrieb:

    Oder gibt es da noch einen besseren Weg mit anderem Ansi C oder sogar WinAPI?

    winapi bietet viele möglichkeiten, z.b. sowas:

    int FileExists (char *path)
    {
       return GetFileAttributes(path) != INVALID_FILE_ATTRIBUTES;
    }
    

    ^^geht auch für verzeichnisse

    Kóyaánasqatsi schrieb:

    ...würde ich dir boost::filesystem raten:

    warum? weil man doppelpünktchen lieb hat?
    🙂



  • pferdefreund schrieb:

    STAT(2) Linux Programmer's Manual STAT(2)

    datei schrieb:

    ... oder sogar WinAPI?

    Linux != Windows
    lstat != ANSI-C

    Die stdio ermöglicht einen ausgesprochen generischen Zugriff auf Dateien, kann daher recht wenig über Dateirechte, Attribute usw. wissen. Für C helfen die MFC- Geschichten auch nicht weiter, aber die WinAPI gibt's ja auch noch: Im MSDN findest Du sicher etwas, was Dir da weiterhilft. 😉


Anmelden zum Antworten