Good way of checking if file exists ?

Discussion in 'C Programming' started by Robert Frunzke, Jan 7, 2004.

  1. a standard C compatible way could be:

    FILE *fp = fopen("file","r");
    if( fp ) {
    // exists
    fclose(fp);
    } else {
    // doesnt exist
    }




    Geiregat Jonas wrote:
    > is using
    > if(open("file",O_EXCL) != -1){ printf("File does
    > exists")}else{printf("file does not exists"); }
    >
    > a good way of checking if a file exists or not, if not how should I do it ?
    >
     
    Robert Frunzke, Jan 7, 2004
    #1
    1. Advertising

  2. Robert Frunzke <> scribbled the following:
    > a standard C compatible way could be:


    > FILE *fp = fopen("file","r");
    > if( fp ) {
    > // exists
    > fclose(fp);
    > } else {
    > // doesnt exist


    Doesn't exist, exists but isn't readable, exists but already has too
    many locks, or other similar reasons.

    > }


    It's impossible to check existence for certain in pure ISO standard C.

    --
    /-- Joona Palaste () ------------- Finland --------\
    \-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
    "Parthenogenetic procreation in humans will result in the founding of a new
    religion."
    - John Nordberg
     
    Joona I Palaste, Jan 7, 2004
    #2
    1. Advertising

  3. is using
    if(open("file",O_EXCL) != -1){ printf("File does
    exists")}else{printf("file does not exists"); }

    a good way of checking if a file exists or not, if not how should I do it ?
     
    Geiregat Jonas, Jan 7, 2004
    #3
  4. Robert Frunzke

    Eric Guest

    Geiregat Jonas <> wrote:

    > is using
    > if(open("file",O_EXCL) != -1){ printf("File does
    > exists")}else{printf("file does not exists"); }
    >
    > a good way of checking if a file exists or not, if not how should I do it ?


    I would recommend using 'fopen' instead to use a standard c function.

    However, standard C doesn't provide any guaranteed way to determine
    whether a file exists or not. fopen can fail even if a file does exist.

    However, it is possible that it is a reasonable method for your system,
    but that question could only be answered by people knowledgeable with
    your specific system.

    --
    == Eric Gorr ========= http://www.ericgorr.net ========= ICQ:9293199 ===
    "Therefore the considerations of the intelligent always include both
    benefit and harm." - Sun Tzu
    == Insults, like violence, are the last refuge of the incompetent... ===
     
    Eric, Jan 7, 2004
    #4
  5. Robert Frunzke

    Coos Haak Guest

    Op Wed, 07 Jan 2004 22:35:17 +0000 schreef Geiregat Jonas
    <>:

    >Joona I Palaste wrote:
    >> Robert Frunzke <> scribbled the following:
    >>
    >>>a standard C compatible way could be:

    >>
    >>
    >>>FILE *fp = fopen("file","r");
    >>>if( fp ) {
    >>> // exists
    >>> fclose(fp);
    >>>} else {
    >>> // doesnt exist

    >>
    >>
    >> Doesn't exist, exists but isn't readable, exists but already has too
    >> many locks, or other similar reasons.
    >>
    >>
    >>>}

    >>
    >>
    >> It's impossible to check existence for certain in pure ISO standard C.
    >>

    >Using the stat function would solve some probleme's because you don't
    >need any access rights. I think stat is the best way (I'm using linux).


    access rights and stat are unknown to pure ISO standard C.

    --
    Coos
     
    Coos Haak, Jan 7, 2004
    #5
  6. Geiregat Jonas <> writes:
    > is using
    > if(open("file",O_EXCL) != -1){ printf("File does
    > exists")}else{printf("file does not exists"); }
    >
    > a good way of checking if a file exists or not, if not how should I do it ?


    There's no really good portable way to determine whether a named file
    exists; you'll probably have to resort to system-specific methods
    (which you can ask about in another newsgroup).

    Before you do, you should define more clearly what information you're
    looking for and what you intend to do with it. On a multi-processing
    system, for example, if your logic is something like this:

    if (file exists) {
    open existing file
    }
    else {
    create new file
    initialize new file
    }

    you should allow for the possibility that the file is created <OT>by
    another process</OT> after you check for its existence and before you
    attempt to create it.

    Note also that if a file doesn't exist, that doesn't imply that you
    have permission to create it.

    In many cases, it may not be possible to determine whether a file
    exists. On a system with user accounts and directories with
    permission settings, an attempt to determine whether a file exists may
    fail because you don't have permission to read the directory that may
    or may not contain it.

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://www.sdsc.edu/~kst>
    Schroedinger does Shakespeare: "To be *and* not to be"
     
    Keith Thompson, Jan 7, 2004
    #6
  7. Joona I Palaste wrote:
    > Robert Frunzke <> scribbled the following:
    >
    >>a standard C compatible way could be:

    >
    >
    >>FILE *fp = fopen("file","r");
    >>if( fp ) {
    >> // exists
    >> fclose(fp);
    >>} else {
    >> // doesnt exist

    >
    >
    > Doesn't exist, exists but isn't readable, exists but already has too
    > many locks, or other similar reasons.
    >
    >
    >>}

    >
    >
    > It's impossible to check existence for certain in pure ISO standard C.
    >

    Using the stat function would solve some probleme's because you don't
    need any access rights. I think stat is the best way (I'm using linux).
     
    Geiregat Jonas, Jan 7, 2004
    #7
  8. Geiregat Jonas <> wrote in message news:<3ffc2a96$0$1805$>...
    > is using
    > if(open("file",O_EXCL) != -1){ printf("File does
    > exists")}else{printf("file does not exists"); }
    >
    > a good way of checking if a file exists or not, if not how should I do it ?


    In my opinion, the best option is to use access() call instead of
    open() call. In this case, the above given code will look like:

    if (access("file", F_OK) == 0)
    {
    printf("Files does exists");
    }
    else
    {
    printf("File does not exist");
    ...
    }

    Regards,
    - Rahul Agarkar
     
    Rahul Agarkar, Jan 8, 2004
    #8
  9. Rahul Agarkar <> scribbled the following:
    > Geiregat Jonas <> wrote in message news:<3ffc2a96$0$1805$>...
    >> is using
    >> if(open("file",O_EXCL) != -1){ printf("File does
    >> exists")}else{printf("file does not exists"); }
    >>
    >> a good way of checking if a file exists or not, if not how should I do it ?


    > In my opinion, the best option is to use access() call instead of
    > open() call. In this case, the above given code will look like:


    > if (access("file", F_OK) == 0)
    > {
    > printf("Files does exists");
    > }
    > else
    > {
    > printf("File does not exist");
    > ...
    > }


    Neither access() or open() are ISO standard C functions. Whatever next,
    will you be suggesting OpenFile() in <windows.h> or something?
    (That function name might be wrong. I haven't actually *looked* at
    <windows.h>.)

    --
    /-- Joona Palaste () ------------- Finland --------\
    \-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
    "This isn't right. This isn't even wrong."
    - Wolfgang Pauli
     
    Joona I Palaste, Jan 8, 2004
    #9
  10. Robert Frunzke

    CBFalconer Guest

    Rahul Agarkar wrote:
    > Geiregat Jonas <> wrote in message
    >
    > > is using
    > > if(open("file",O_EXCL) != -1)
    > > printf("File does exists");
    > > else
    > > printf("file does not exists");
    > >
    > > a good way of checking if a file exists or not, if not how
    > > should I do it ?

    >
    > In my opinion, the best option is to use access() call instead of
    > open() call. In this case, the above given code will look like:
    >
    > if (access("file", F_OK) == 0)
    > printf("Files does exists");
    > else {
    > printf("File does not exist");
    > ...
    > }


    (slightly reformatted). open, access, O_EXCL and F_OK do not
    exist in standard C, the subject of this newsgroup. Please do not
    give off-topic answers here, where there may well be nobody to
    correct any errors.

    --
    Chuck F () ()
    Available for consulting/temporary embedded and systems.
    <http://cbfalconer.home.att.net> USE worldnet address!
     
    CBFalconer, Jan 8, 2004
    #10
  11. CBFalconer wrote:
    > Rahul Agarkar wrote:
    >
    >>Geiregat Jonas <> wrote in message
    >>
    >>
    >>>is using
    >>> if(open("file",O_EXCL) != -1)
    >>> printf("File does exists");
    >>> else
    >>> printf("file does not exists");
    >>>
    >>>a good way of checking if a file exists or not, if not how
    >>>should I do it ?

    >>
    >>In my opinion, the best option is to use access() call instead of
    >>open() call. In this case, the above given code will look like:
    >>
    >>if (access("file", F_OK) == 0)
    >> printf("Files does exists");
    >>else {
    >> printf("File does not exist");
    >> ...
    >>}

    >
    >
    > (slightly reformatted). open, access, O_EXCL and F_OK do not
    > exist in standard C, the subject of this newsgroup. Please do not
    > give off-topic answers here, where there may well be nobody to
    > correct any errors.
    >


    Where could I find information what is Standard ISO C
    and information about other standards ?
    I'm using stat now.
     
    Geiregat Jonas, Jan 8, 2004
    #11
  12. Robert Frunzke

    Default User Guest

    Geiregat Jonas wrote:

    > Where could I find information what is Standard ISO C
    > and information about other standards ?
    > I'm using stat now.


    The obvious answer is, the ISO C Standard.




    Brian Rodenborn
     
    Default User, Jan 8, 2004
    #12
  13. Robert Frunzke

    CBFalconer Guest

    Geiregat Jonas wrote:
    > CBFalconer wrote:
    > > Rahul Agarkar wrote:
    > >
    > >>Geiregat Jonas <> wrote in message
    > >>
    > >>
    > >>>is using
    > >>> if(open("file",O_EXCL) != -1)
    > >>> printf("File does exists");
    > >>> else
    > >>> printf("file does not exists");
    > >>>
    > >>>a good way of checking if a file exists or not, if not how
    > >>>should I do it ?
    > >>
    > >>In my opinion, the best option is to use access() call instead of
    > >>open() call. In this case, the above given code will look like:
    > >>
    > >>if (access("file", F_OK) == 0)
    > >> printf("Files does exists");
    > >>else {
    > >> printf("File does not exist");
    > >> ...
    > >>}

    > >
    > > (slightly reformatted). open, access, O_EXCL and F_OK do not
    > > exist in standard C, the subject of this newsgroup. Please do not
    > > give off-topic answers here, where there may well be nobody to
    > > correct any errors.

    >
    > Where could I find information what is Standard ISO C
    > and information about other standards ?
    > I'm using stat now.


    Try:
    <http://www.dinkumware.com>
    <http://std.dkuug.dk/jtc1/sc22/wg14/www/docs/n869/>

    for the latter I advise downloading the text version for easy
    searching, grepping, etc.

    --
    Chuck F () ()
    Available for consulting/temporary embedded and systems.
    <http://cbfalconer.home.att.net> USE worldnet address!
     
    CBFalconer, Jan 8, 2004
    #13
  14. Robert Frunzke

    Eric Guest

    Geiregat Jonas <> wrote:

    > I think it was obvious that I knew that but was looking for the official
    > place to get it from.


    I believe this is it:

    Search for:

    9899:1999

    at

    http://www.iso.ch

    which should bring up this page:

    http://tinyurl.com/3bpmj

    which is what I believe you are looking for.


    --
    == Eric Gorr ========= http://www.ericgorr.net ========= ICQ:9293199 ===
    "Therefore the considerations of the intelligent always include both
    benefit and harm." - Sun Tzu
    == Insults, like violence, are the last refuge of the incompetent... ===
     
    Eric, Jan 8, 2004
    #14
  15. Default User wrote:
    > Geiregat Jonas wrote:
    >
    >
    >>Where could I find information what is Standard ISO C
    >>and information about other standards ?
    >>I'm using stat now.

    >
    >
    > The obvious answer is, the ISO C Standard.
    >
    >
    >
    >
    > Brian Rodenborn


    I think it was obvious that I knew that but was looking for the official
    place to get it from.
     
    Geiregat Jonas, Jan 8, 2004
    #15
  16. Eric wrote:
    > Geiregat Jonas <> wrote:
    >
    >
    >>I think it was obvious that I knew that but was looking for the official
    >>place to get it from.

    >
    >
    > I believe this is it:
    >
    > Search for:
    >
    > 9899:1999
    >
    > at
    >
    > http://www.iso.ch
    >
    > which should bring up this page:
    >
    > http://tinyurl.com/3bpmj
    >
    > which is what I believe you are looking for.
    >
    >


    It should also be available from various national standards bodies, such
    as ANSI in the US (which sells the downloadable PDF for $18, last I heard).

    -Kevin
    --
    My email address is valid, but changes periodically.
    To contact me please use the address from a recent posting.
     
    Kevin Goodsell, Jan 8, 2004
    #16
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Totan
    Replies:
    0
    Views:
    1,056
    Totan
    Apr 17, 2006
  2. Leslaw Bieniasz

    checking if a file/stream exists

    Leslaw Bieniasz, Jan 3, 2005, in forum: C++
    Replies:
    14
    Views:
    912
    ToeNi
    Jan 6, 2005
  3. Bryan Rasmussen
    Replies:
    2
    Views:
    360
    Scott David Daniels
    Jun 12, 2005
  4. Army1987

    Checking if a file exists

    Army1987, Apr 7, 2007, in forum: C Programming
    Replies:
    26
    Views:
    1,370
    =?utf-8?B?SGFyYWxkIHZhbiBExLNr?=
    Apr 13, 2007
  5. Paul Burton

    Checking if a file exists within @INC

    Paul Burton, Sep 25, 2003, in forum: Perl Misc
    Replies:
    1
    Views:
    137
    Sisyphus
    Sep 26, 2003
Loading...

Share This Page