Comment analysez-vous un répertoire pour les dossiers et les fichiers en C? Il doit être multi-plateforme.
Réponses
Trop de publicités?Ce qui suit imprimera les noms des fichiers dans le répertoire actuel:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
(crédit: http://www.gnu.org/software/libtool/manual/libc/Simple-Directory-Lister.html)
La réponse stricte est "vous ne pouvez pas", car le concept même de dossier n'est pas vraiment multi-plateforme.
Sur les plates-formes MS, vous pouvez utiliser _findfirst, _findnext et _findclose pour une sensation 'c', ainsi que FindFirstFile et FindNextFile pour les appels Win32 sous-jacents.
Voici la réponse à la C-FAQ:
J'ai créé un en-tête open source (BSD) C qui traite de ce problème. Il supporte actuellement POSIX et Windows. Vérifie s'il te plaît:
https://github.com/cxong/tinydir
tinydir_dir dir;
tinydir_open(&dir, "/path/to/dir");
while (dir.has_next)
{
tinydir_file file;
tinydir_readfile(&dir, &file);
printf("%s", file.name);
if (file.is_dir)
{
printf("/");
}
printf("\n");
tinydir_next(&dir);
}
tinydir_close(&dir);
opendir / readdir sont POSIX. Si POSIX ne suffit pas pour la portabilité que vous souhaitez atteindre, vérifiez Apache Portable Runtime.