Giriş
Şu satırları dahil ederiz.
Metodun açıklaması şöyle.
opendir ile dizini açmak için şöyle yaparız.
Şöyle yaparız.
Tüm openXXX metodlarında olduğu gibi açılan kaynağı kapatmak gerekir.
Açıklaması şöyle.
Örnek
Tüm yolun ismini almak için şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız
Dosyaları dolaşırken büyük ihtimalle şu sanal dizinleri atlamak isteriz. Şöyle yaparız.
Şu satırları dahil ederiz.
d_name alanı
Nesnenin ismine d_name ile erişiriz. Nesneye olan tüm yolu vermez! Nesneyi okumak için şöyle yaparız
Dolaşılan nesnenin tipi d_type alanı ile bulunur. Örnekte nesne dizin ise pas geçiliyor.
Şu satırları dahil ederiz.
#include <sys/types.h>
#include <dirent.h>
opendir metoduMetodun açıklaması şöyle.
ÖrnekThe opendir() function opens a directory stream corresponding to the directory name, and returns a pointer to the directory stream.The opendir() and fdopendir() functions return a pointer to the directory stream. On error, NULL is returned, and errno is set appropriately.
opendir ile dizini açmak için şöyle yaparız.
DIR* directory = opendir(".");
Metod sonucunun NULL'dan farklı olduğunu kontrol etmek için şöyle yaparız.if (directory == NULL) {
printf("Error\n");
exit(2);
}
ÖrnekŞöyle yaparız.
void walk (const string &path, function<void (const string &)> talk)
{
if (auto dir = opendir (path.c_str ())) {
while (auto f = readdir (dir)) {
auto name = f->d_name;
auto type = f->d_type;
switch (type)
{
case DT_DIR: walk (path + name + "/", talk); break;
case DT_REG: talk (path + name ); break;
}
}
closedir(dir);
}
}
closedir metoduTüm openXXX metodlarında olduğu gibi açılan kaynağı kapatmak gerekir.
closedir (directory);
readdir metoduAçıklaması şöyle.
readdir() returns the name of the subdirectories, not the path to get to them.Açıklaması şöyle.
The readdir() function shall return a pointer to a structure representing the directory entry at the current position in the directory stream specified by the argument dirp, and position the directory stream at the next entry. It shall return a null pointer upon reaching the end of the directory stream. The structure dirent defined in the <dirent.h> header describes a directory entry.
Tüm yolun ismini almak için şöyle yaparız.
while ((ent = readdir (directory)) != NULL)
{
std::string path = dir;
path += ent->d_name;
if (stat(path.c_str(), &dir_stat)== 0) {...}
}
ÖrnekŞöyle yaparız.
struct dirent *dirent;
while ((dirent = readdir (dirp)) != NULL) {
...
}
ÖrnekŞöyle yaparız
struct dirent* direntp = readdir(dirp);
while(direntp != NULL)
{
// all your work here
direntp = readdir(dirp);
}
ÖrnekDosyaları dolaşırken büyük ihtimalle şu sanal dizinleri atlamak isteriz. Şöyle yaparız.
if( (strcmp (direntp->d_name, ".")==0) || (strcmp(direntp->d_name, "..")==0) )
{
continue;
}
dirent yapısıŞu satırları dahil ederiz.
#include <sys/types.h>
#include <dirent.h>
readdir çağrısı bu yapıyı döner.
Nesnenin ismine d_name ile erişiriz. Nesneye olan tüm yolu vermez! Nesneyi okumak için şöyle yaparız
fopen (file->d_name, "r+");
Nesne hakkında bilgi almak için şöyle yaparız.
struct stat stat;
stat (direntp->d_name, &stat);
d_type alanı
Açıklaması şöyleunsigned char d_type; /* Type of file; not supported
by all filesystem types */
DT_DIR,DT_REG (dosya) ,DT_UNKNOWN gibi değerler alabilir.Dolaşılan nesnenin tipi d_type alanı ile bulunur. Örnekte nesne dizin ise pas geçiliyor.
if (direntp->d_type != DT_REG )
{
continue;
}
Hiç yorum yok:
Yorum Gönder