Newsgroup: it.comp.lang.c
Titolo: aiuto......

Ciao!!!
Ho appena iniziato a imparare qualcosa sul c++,
volevo sapere como si fa a sapere se un file esiste o no???Cioe
il programma cerca il file in una directory, se esiste scrivi una cosa
e lo esegue o se no scrivi un'altra e non lo esegue..........
scusate l'italiano, ma non sono perfetto........
un salutone e grazie a tutti !!!!
PS: USO LINUX e NON WINCESS
Pligero  -  
opl...@youvegotmail.net

 volevo sapere como si fa a sapere se un file esiste o no???
Basta che tenti di aprirlo in lettura con la funzione fopen(). Se ci
riesci vuol dire che esiste e allora lo chiudi e fai quello che devi
fare.
EMG

 Basta che tenti di aprirlo in lettura con la funzione fopen().
beh, in <dir.h> trovi funzioni tipo findfirst() che sicuramente centrano di
più la questione... in effetti non so quanto siano portabili, ma in DOS
funzionano benone!
TobiX



Le funzioni del tipo findfirst() non solo non sono portabili, ma in
questo caso neanche necessarie.
E poi, da quanto mi e' dato di capire l'amico usa Linux.
Andrea Laforgia

 Basta che tenti di aprirlo in lettura con la funzione fopen().
beh, in <dir.h> trovi funzioni tipo findfirst() che sicuramente centrano di
più la questione... in effetti non so quanto siano portabili, ma in DOS
funzionano benone!
TobiX


ICQ #34602650

 funzionano benone!
Esatto, in dos funzionano benone. Peccato che l'amico stia usando Linux
:-)


...


 fare.
Quasi; se il file mode non ti permette accesso, o se c'e' un lock sul
file perche' qualcun altro lo ha aperto in modo esclusivo, fopen
ritorna errore anche se il file c'e'.  Lo standard POSIX (e quindi
Linux) ha un access(2) che serve a questo scopo.
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

 in effetti non so quanto siano portabili, ma in DOS funzionano benone!
Appunto. Non conviene utilizzare funzioni non standard (findfirst() non
lo è mentre fopen() si) quando se ne può benissimo fare a meno.
EMG

 e' la access( char *path, int amode )
La funzione access() non fa parte della libreria standard del C. Mi
sembra sia POSIX.
EMG

...


 ritorna errore anche se il file c'e'.
Giusto.
EMG

 ritorna errore anche se il file c'e'.  
Potrei suggerire:
FILE *f;
f = fopen("pippo.txt", "r");
if(f==NULL && errno == ENOENT) printf("Il file non c'č");


 if(f==NULL && errno == ENOENT) printf("Il file non c'è");
errno=EACCESS? EMFILE? ENFILE? EFBIG? e magari altri?


 errno=EACCESS? EMFILE? ENFILE? EFBIG? e magari altri?
Hai seguito il thread?


 if(f==NULL && errno == ENOENT) printf("Il file non c'č");
Buono!
EMG

errno=EACCESS? EMFILE? ENFILE? EFBIG? e magari altri?
Ho fatto una prova sotto Win95.
Ho lanciato un programma che apriva un file in modalita' "r" ed
iniziava un loop infinito ed uno in modalita' "r+" allo stesso tempo.
In effetti il secondo ritorna errno = EACCESS.
Se la modalita' fosse stata solo "r" non si sarebbero avuti problemi
(perlomeno errno=0) , ma ovviamente con "r+" si esclude l'accesso.
Quindi credo che il codice riportato sia corretto.
Andrea Laforgia

 non e che ci mette molto???
No, ci metterebbe molto solo se lo dovessi anche leggere tutto. Ma tu
devi solo aprirlo.
EMG

non e che ci mette molto??? 
[vedi sopra] 
La risposta e' no.
Andrea Laforgia

adesso provo con la funzione access()
comunque volevo sapere la funzione che
esegua un file eseguibile che non fa parte del
prog, per esempio:
fare in modo che il mio programma dopo aver verificato se
esiste il file, lo esegua.
E allora......mi puoi aiutare??? speriamo di si!!!! 8-)
comunque io ho preso un libro da un mio amico e volevo sapere se
e utile, il libro è :  Visual C++ 5 for Dummies della APOGEO, lo so che
visual c++ non c'e' per Linux ma il libro parla anche del c++, e se non e
troppo, volevo sapere anche un libro che parli della programmazione di
videogiochi, lo so che è un po presto per me che ho appena iniziato ma
comunque volevo gia aver qualche idea di quale libro comprare in un
futuro.......
MILLE GRAZIE e un MEGA SALUTONE A TUTTI!!!!!!!
Pligero  -  
opl...@youvegotmail.net

 ritorna errore anche se il file c'e'.
esatto.
č proprio per questo che proponevo funzioni come findfirst() del dos
E visto che io conosco solo il dos, ho proposto di trovare funzioni simili
in linux, che (ripeto) centrano di piů il problema di quanto non faccia un
fopen() - che tra l'altro suppongo sia troppo dispendioso, nel caso si debba
controllare l'esistenza di parecchi file
TobiX