Come posso verificare se esiste una directory su Linux in C?Come posso verificare se esiste una directory?
risposta
È possibile utilizzare opendir()
e verificare se ENOENT == errno
in caso di fallimento:
DIR* dir = opendir("mydir");
if (dir)
{
/* Directory exists. */
closedir(dir);
}
else if (ENOENT == errno)
{
/* Directory does not exist. */
}
else
{
/* opendir() failed for some other reason. */
}
Il modo migliore è probabilmente provare ad aprirlo, usando solo opendir()
per esempio.
Si noti che è sempre meglio provare a utilizzare una risorsa di file system e gestire eventuali errori che si verificano perché non esiste, piuttosto che controllare e successivamente provare. C'è un'ovvia condizione di gara nell'ultimo approccio.
Si potrebbe utilizzare stat()
e passare l'indirizzo di una struct stat
, quindi controllare i suoi Stati st_mode
per avere S_IFDIR
set.
Altri due modi, forse meno corretto è quello di utilizzare. Il primo, utilizzando solo le librerie standard e solo per i file:
FILE *f;
f = fopen("file", "r")
if(!f)
printf("there is no file there");
Questo si potrebbe lavorare su tutto il sistema operativo.
o un altro anche per dirs, utilizzando la chiamata di sistema con system(). È l'opzione peggiore, ma ti dà un altro modo. Per qualcuno forse utile.
La domanda riguardava specificamente le directory, non i file. E ti consigliamo di chiamare 'system()', dovresti specificare quale argomento passare ad esso. –
"*' printf ("non c'è file lì") "*": non essere in grado di aprire come file non significa necessariamente che non esiste. Turing intorno: il codice potrebbe non riuscire a 'fopen()' un file esistente, ad esempio a causa di problemi di accesso. – alk
Secondo man(2)stat è possibile utilizzare la macro S_ISDIR sul campo st_mode:
bool isdir = S_ISDIR(st.st_mode);
Nota a margine, mi consiglia di utilizzare Boost e/o Qt4 per rendere il supporto cross-platform più facile se il software può essere vitale su altri sistemi operativi.
Utilizzare il codice seguente per verificare se esiste una cartella. Funziona su entrambe le piattaforme Linux di Windows &.
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char* argv[])
{
const char* folderr;
//folderr = "C:\\Users\\SaMaN\\Desktop\\Ppln";
folderr = "/tmp";
struct stat sb;
if (stat(folderr, &sb) == 0 && S_ISDIR(sb.st_mode))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
Sei sicuro che le intestazioni incluse siano sufficienti, almeno per Linux? – alk
Si può anche usare in combinazione con access
opendir
per determinare se la directory esiste, e, se esiste il nome, ma non è una directory. Per esempio:
/* test that dir exists (1 success, -1 does not exist, -2 not dir) */
int
xis_dir (char *d)
{
DIR *dirptr;
if (access (d, F_OK) != -1) {
// file exists
if ((dirptr = opendir (d)) != NULL) {
closedir (dirptr);
} else {
return -2; /* d exists, but not dir */
}
} else {
return -1; /* d does not exist */
}
return 1;
}
Sono d'accordo che la seguente intestazione sono una delle migliori soluzioni:
#include <stdio.h>
#include <sys/stat.h>
Non hai bisogno di un codice di accompagnamento con le intestazioni per rispondere effettivamente alla domanda? –
Questo non fornisce una risposta alla domanda. – alk
- 1. Come posso verificare se esiste una directory utilizzando SQL Server?
- 2. Verificare se esiste una directory o
- 3. Verificare se esiste una directory in PHP
- 4. Come verificare se esiste una determinata directory in Ruby
- 5. come posso verificare se esiste un file?
- 6. Come verificare se esiste directory in C++ e WinAPI
- 7. Come posso verificare se esiste una chiave JSON in Postgres?
- 8. Come posso verificare se esiste una tabella nell'API C++ sqlite3?
- 9. Come posso verificare se esiste una chiave in un record?
- 10. Come posso verificare se esiste una variabile in Scheme?
- 11. Come posso verificare se una risorsa incorporata esiste o no?
- 12. Come posso verificare se esiste una colonna in SQL Server?
- 13. Come posso verificare se esiste una vista in un database?
- 14. Come posso verificare se esiste una variabile, in eex?
- 15. Come posso verificare se esiste una procedura in un pacchetto?
- 16. Come posso verificare se esiste una variabile in Smarty?
- 17. Come posso verificare se esiste un file o una directory di file in bash?
- 18. Come verificare se esiste una classe
- 19. Come verificare se esiste una chiave JSON?
- 20. Come verificare se esiste una chiave appSettings?
- 21. Come verificare se esiste una tabella Cassandra
- 22. Come verificare se esiste una proprietà?
- 23. Verificare se esiste una sessione JSF
- 24. Verificare se una directory è leggibile
- 25. Script di shell per verificare se esiste una directory e se non crearla?
- 26. Come posso verificare se un file esiste usando Emacs Lisp?
- 27. Come posso creare una directory se non ne esiste una con Perl?
- 28. Come posso verificare se esiste un buffer corrente in Emacs?
- 29. Come posso verificare se la riga esiste o no?
- 30. Verificare se esiste una cartella in una directory e crearli utilizzando C#
Eventuali duplicati di [modo più veloce C per verificare se esiste una directory] (http: // StackOverflow. it/questions/9314586/c -velocità-più veloce-per-verificare-se-una-directory-esistente) –