c - बचन - हेपेटाइटिस से बचाव




आप सी में निर्देशिका सूची कैसे प्राप्त करते हैं? (7)

आप सी में फ़ोल्डर और फ़ाइलों के लिए निर्देशिका कैसे स्कैन करते हैं? इसे क्रॉस-प्लेटफॉर्म होना चाहिए।


opendir / readdir POSIX हैं। यदि POSIX पोर्टेबिलिटी के लिए पर्याप्त नहीं है जिसे आप प्राप्त करना चाहते हैं, तो अपाचे पोर्टेबल रनटाइम की जांच करें


आप विकीबुक्स लिंक पर नमूना कोड पा सकते हैं

/**************************************************************
 * A simpler and shorter implementation of ls(1)
 * ls(1) is very similar to the DIR command on DOS and Windows.
 **************************************************************/
#include <stdio.h>
#include <dirent.h>

int listdir(const char *path) 
{
  struct dirent *entry;
  DIR *dp;

  dp = opendir(path);
  if (dp == NULL) 
  {
    perror("opendir");
    return -1;
  }

  while((entry = readdir(dp)))
    puts(entry->d_name);

  closedir(dp);
  return 0;
}

int main(int argc, char **argv) {
  int counter = 1;

  if (argc == 1)
    listdir(".");

  while (++counter <= argc) {
    printf("\nListing %s...\n", argv[counter-1]);
    listdir(argv[counter-1]);
  }

  return 0;
}

निम्नलिखित निर्देशिका में फ़ाइलों के नाम मुद्रित करेंगे:

#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;
}

(क्रेडिट: http://www.gnu.org/software/libtool/manual/libc/Simple-Directory-Lister.html )


निर्देशिका में फ़ाइलों को गिनाने के लिए कोई मानक सी (या सी ++) तरीका नहीं है।

विंडोज के तहत आप निर्देशिका में सभी प्रविष्टियों को गिनने के लिए FindFirstFile / FindNextFile फ़ंक्शंस का उपयोग कर सकते हैं। लिनक्स / ओएसएक्स के तहत opendir / readdir / बंदरगाह कार्यों का उपयोग करें।


मैंने एक ओपन सोर्स (बीएसडी) सी हेडर बनाया है जो इस समस्या से संबंधित है। यह वर्तमान में POSIX और विंडोज का समर्थन करता है। कृपया यह देखें:

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);

सख्त जवाब "आप नहीं कर सकते", क्योंकि फ़ोल्डर की अवधारणा वास्तव में क्रॉस-प्लेटफॉर्म नहीं है।

एमएस प्लेटफ़ॉर्म पर आप _findfirst, _findnext और _findclose का उपयोग 'सी' प्रकार के अनुभव के लिए कर सकते हैं, और अंतर्निहित Win32 कॉल के लिए FindFirstFile और FindNextFile का उपयोग कर सकते हैं।

सी-एफएक्यू उत्तर यहां दिया गया है:

http://c-faq.com/osdep/readdir.html






common-tasks