Newsgroup: it.comp.lang.c
Titolo: Cosa se non fopen?

Ciao, esiste una funzione che permette vi verificare la presenza o no di 
un file su disco senza tentare di aprirlo in lettura con la funzione 
fopen()?
Qualsiasi risposta è pienamente gradita.
Grazie.

fopen()?
Puoi utilizzare le funzioni in <dirent.h> per avere una lista dei file nella
directory, ma utilizzare fopen() e' sicuramente piu' semplice (sempre che il
file sia un file normale e non una directory).
-- 
Ciao.
-----[ Roberto Lupi ]------------------------------------------------------
  As of 24 Oct 1997, I will be charging for the receipt of unsolicited
  email.  The rate is simple.  Once I receive unsolicited email, you
  have sold your soul to me.  Sending me unsolicited email means that
  you implicitly agree to these terms.  Have a nice day.  =)
---------------------------------------------------------------------------

fopen()?
access()
Gianpaolo Bottin
- The truth is out there -

>fopen()?
usa access(), in genere c'e' su qualunque compilatore C o C++, attento ai
parametri che potrebbero variare da piattaforma a piattaforma:
in generale la sintassi segue questa linea: int access( const char *path,
int mode );
path: path completa del file da verificare
mode: modo di verifica, puo' essere:
00: solo esistenza
 02: esiste con permesso di scrittura
04: esiste con permesso di lettura
 06: esiste con permesso di lettura/scrittura
La funzione ritorna 0 (zero) se il file esiste ed ha il modo specificato,
ritorna invece -1 se il file NON esiste o NON ha il modo specificato, in
questo caso viene settata la variabile
errno ad uno dei seguenti valori:
EACCES: accesso negato, il file esiste ma non ha i permessi richiesti
ENOENT: il file NON esiste
Quando viene usata su una directory stabilisce SOLO se esiste o meno (non
rileva i permessi)
Esempio:
/* verifica che il file MYFILE esista ed abbia permesso di scrittura */
#include  <io.h>
#include  <stdio.h>
#include  <stdlib.h>
void main( void )
{
    char *pszName = "MYFILE";
    /* verifica prima se esiste */
    if (!access( pszName, 0 ))  {
         printf( "Il file %s esiste\n", pszName );
        /* controlla se ha permesso di scrittura */
        if  (!access( pszName, 2 )) {
            printf( "Il file %s ha permesso di scrittura\n", pszName );
         }
    }
}
Per ulteriori dettagli consulta il reference manual di C o C++.
Fabio
================
       _/
    _/_/_/
     _/
    _/  _/
    _/_/
tec...@login.it
================

 wrote:
: >>Ciao, esiste una funzione che permette vi verificare la presenza o no di
: >>un file su disco senza tentare di aprirlo in lettura con la funzione
: >>fopen()?
: usa access(), in genere c'e' su qualunque compilatore C o C++, attento ai
: parametri che potrebbero variare da piattaforma a piattaforma:
access e' XPG4, per cui puoi essere moderatamente sicuro della
portabilita'. Comunque su Solaris/DEC Unix/Linux e' implementata nello
stesso modo. Su winzozz, non frequento...
     access() checks the file pointed to by path for  accessibil-
     ity  according  to the bit pattern contained in amode, using
     the real user ID in place of the effective user ID  and  the
     real  group  ID  in  place  of  the effective group ID. This
     allows a setuid process to verify that the user  running  it
     would have had permission to access this file.  The bit pat-
     tern contained in amode is  constructed  by  an  OR  of  the
     access  permissions  to be checked (R_OK, W_OK, and X_OK, or
     the existence test, (F_OK).  These constants are defined  in
     <unistd.h> 
PS: Una mozione di ordine: si prega di specificare _sempre_
piattaforma e compilatore impiegato, sia nelle
domande che nelle risposte, per l'ottimo motivo che il mondo
non usa solo windoze e dintorni. Se poi si fa riferimento
a POSIX e' meglio...
Grazie.
--
F. Lovergine (f.lov...@iesi.ba.cnr.it.REMOVE.THIS.BEFORE.REPLY)
PLEASE, REMOVE ANTI-SPAM SUFFIX BEFORE REPLY