Kód Multiplatformní výpis souborů v adresáři v CPP
Z CHWiki
Multiplatformní knihovna pro výpis souborů v zadaném adresáři:
[editovat] Knihovna
// Copyleft (c) 2005 Marek Olsak <eosiecoder@gmail.om>
// Platform independent file searching.
#pragma once
#ifdef WIN32
#include <io.h>
#define FIND_INVALID -1
#define find_dir_t long
#define find_data_t _finddata_t
inline find_dir_t find_first(const char *path, find_data_t *fd)
{
char *str = (char*)malloc(strlen(path)+5);
strcpy(str, path);
strcat(str, "/*.*");
find_dir_t dp = (long)_findfirst(str, fd);
free(str);
return dp;
}
#define find_next _findnext
#define find_close _findclose
#define find_getfile(f) (f).name
#define find_isdir(f) (((f).attrib & _A_SUBDIR) != 0)
#else // UNIX systems
#include <stddef.h>
#include <sys/types.h>
#include <dirent.h>
#define FIND_INVALID 0
typedef DIR *find_dir_t;
typedef struct dirent *find_data_t;
inline find_dir_t find_first(const char *path, find_data_t *fd)
{
char *str = (char*)malloc(strlen(path)+2);
strcpy(str, path);
strcat(str, "/");
find_dir_t dp = opendir(str);
free(str);
if (dp) *fd = readdir(dp);
return dp;
}
#define find_next(d,f) ((*(f)) = readdir(d))
#define find_close closedir
#define find_getfile(f) (f)->d_name
#define find_isdir(f) ((f)->d_type == DT_DIR)
#endif
[editovat] Ukázkový kód
int main(int argc, char **argv)
{
find_dir_t dir;
find_data_t fd;
dir = find_first(".", &fd);
if (dir != FIND_INVALID)
{
do
{
printf("%s\t%s\n", (find_isdir(fd))? "<DIR>" : " ", find_getfile(fd));
}
while (find_next(dir, &fd) != FIND_INVALID);
find_close(dir);
}
getchar();
return 0;
}
[editovat] Výstup programu
<DIR> .
<DIR> ..
findfiles.h
main.cpp
