#  > Desenvolvimento >  > Linguagens de Programação >  >  Como testar se um arquivo existe em C?
Qual a melhor forma de testar se um arquivo exite em C? Eu pensei em abrir o arquivo com fopen() se der erro é por que o arquivo não existe. Mas isso me parece meio burro, ja que eu não vou utilizar o arquivo pra que abrir então! 

Qual a melhor forma de testar se o arquivo existe, digo "melhor forma" em termos de desempenho.

fopen() e fstat() me parecem que fazem mais coisas do simple mais enxuta!

Existe uma função expecifica para testar se um arquivo existe em C? se não qual a melhor forma de testar então?

----------


## jweyrich

fopen e fstat abrem os arquivos, logo, esqueça-os. Você pode utilizar access() ou stat() assim:



```
#include <sys/stat.h>
 
int fileExists(char *cpfileName)
{
    struct stat stStat;
    int errcode = stat (cpfileName, &stStat);
    if (errcode == ENOENT)
        return 0; /* nao existe */
    return 1; /* existe */
}
```

 
ou...



```
#include <unistd.h>
 
int fileExists(char *cpfileName)
{
    int errcode = access(cpfileName, F_OK);
    if (errcode == ENOENT)
        return 0; /* nao existe */
    return 1; /* existe */
}
```

 
ps: olhe as manpages das funções, você pode verificar as permissões também. Outra coisa, a variavel errno já é setada por padrão quando ocorrer um erro.

http://www.fifi.org/cgi-bin/man2html...n2/access.2.gz
http://www.fifi.org/cgi-bin/man2html...man2/stat.2.gz

Abraços

----------


## SDM

Podis ser assim tbm:



```
int main(int argc,char *argv[]){
 
FILE *fp;
fp=fopen("/caminho/pro/arquivo.ext","r");
if(fp){
    printf("Aeee...existe\n");
    fclose(fp);
}else{
    printf("Game Over\nTry again");
}
return(0);
}
```

----------


## Simples assim...

man 3 stat

----------


## SDM

> man 3 stat





> [09:04:[email protected]]$ man 3 stat
> Não existe a entrada stat na secção 3


 :cry: soh aki deu isso???

----------


## veiga

> Postado originalmente por Simples assim...
> 
> man 3 stat
> 
> 
> 
> 
> 
> 
> ...


man 2 stat

----------


## SDM

> man 2 stat


ah soh....valew

----------


## gerossantos

@ veiga

amigo bom dia sou novo aqui e quero fazer o seguinte eu uso o advmenu para jogos estou compilando ele mas queria fazer um codigo para verificar a existencia de um outro executavel dentro da pasta system32 caso esse executavel não exista o advmenu dê uma mensagem de erro e não execute tem como ajudar?


seria mais ou menos isso aqui



```
int main(int argc, char *argv[]){
// nome do arquivo
CHAR arquivo[] = "c:\\windows\\system32\\arcade.exe";
 
// vamos testar a existência do arquivo
if(PathFileExists(arquivo)){
cout << "ENTRE EM CONTATO COM O FORNECEDOR .\n" << endl;
}
else{
cout << "O arquivo NÃO existe no caminho informado ENTRE EM CONTATO COM O FORNECEDOR : " << 
GetLastError() << endl; 
} 
 
system("PAUSE");
return EXIT_SUCCESS;
}
```

 
ja tentei adicionar esse codigo mas da erro tem como ajudar a fazer essa função?

----------

