【问题标题】:Counting number of files and folders in directory计算目录中文件和文件夹的数量
【发布时间】:2020-10-07 03:31:46
【问题描述】:

如何使用 C 计算目录中文件和文件夹的数量。我不知道。我无法编写单行代码。 我不关心当前目录。和父目录.. 在运行程序时,我必须提供一个路径名,例如“C:/Users/me/Documents/Example”。

我需要一个类似“此目录中有 2 个文件夹和 4 个文件”的输出。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。最后请学习如何创建minimal reproducible example
  • 查看opendirreaddirclosedir 的手册页。尽管它们在 Windows 上可能不可用。
  • 并且必须有数千个示例说明如何在 Windows 上枚举目录和文件,既使用 @TomKarzes 已经提到的 POSIX 兼容性函数,也使用原生 Windows API 函数。只需使用您最喜欢的搜索引擎,您就会找到它们。
  • 在 Windows 上,使用函数 FindFirstFileFindNextFile

标签: c file-io directory


【解决方案1】:

适用于 linux 操作系统

下面的代码将列出dir_path中的所有文件和子目录(当前目录使用dir_path = ".")。

描述

此描述引自man7.org link

struct dirent *readdir(DIR *dirp);

readdir()

readdir() 函数返回一个指向dirent structure 的指针 表示指向的目录流中的下一个目录条目 通过dirp。它在到达目录末尾时返回NULL 流或发生错误。有关详细信息,请访问上面的 ma​​n7.org 链接。

#include <stdio.h> 
#include <dirent.h> 

int main(void) 
{ 
   /* de is Pointer for directory entry */
    struct dirent *de;  
    const char* dir_path = "C:/Users/me/Documents/Example";
    /*opendir() returns a pointer of DIR type.*/  
    DIR *dr = opendir(dir_path); 

    if (dr == NULL)  /* opendir returns NULL if couldn't open directory */
    { 
        printf("Could not open current directory" ); 
        return 0; 
    } 

    while ((de = readdir(dr)) != NULL){
        printf("%s\n", de->d_name); 
    }
    closedir(dr);     
    return 0; 
}

windows 操作系统

对于 Windows,请使用头文件:fileapi.h 请参阅此处的 microsoft 文档:fileapi.h

之前在下面的链接中使用FindFirstFileFindNextFileFindClose 函数回答了这个问题。

请查看链接中的答案:list directory in windows in C programming language

【讨论】:

  • @最好的操作系统。是不是:-)?我将添加便携式答案或一些适合 Windows 的答案
  • 我检查了您发送的所有内容。可能一切都在这里。我在链接中找到了答案:stackoverflow.com/questions/1121383/… 答案上的程序计算一切。我想像文件和文件夹一样将它们分开。这些对我来说太复杂了,我是编程的初学者。谁能帮帮我?
  • 我还找到了一个链接gnu.org/software/libc/manual/html_node/Testing-File-Type.html。我可以在分隔常规文件和文件夹时使用 S_ISDIR 和 S_ISREG 宏吗?有人要给我看吗?我真的需要帮助一次喂我请不要教我如何钓鱼。
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 2014-01-31
  • 2020-10-07
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2017-12-25
  • 2012-10-14
相关资源
最近更新 更多