您的位置:

C语言遍历文件夹下所有文件的实现方法

一、Linux系统下的文件遍历

在Linux系统下,可以使用dirent.h库中的函数来遍历文件夹下所有文件。具体实现步骤如下:

#include 
#include 
   

int main() {
    DIR *dir;
    struct dirent *dir_info;
    dir = opendir("/path/to/folder"); // 文件夹路径
    if (dir) {
        while ((dir_info = readdir(dir)) != NULL) {
            printf("%s\n", dir_info->d_name);
        }
        closedir(dir);
    }
    return 0;
}

   
  

以上代码将遍历指定文件夹下的所有文件,并输出文件名。

二、C语言遍历文件夹下的文件及文件夹

如果需要遍历文件夹下的所有文件和文件夹,可以使用递归函数实现。具体实现步骤如下:

#include 
#include 
   
#include 
    
#include 
     

// 遍历文件夹下所有文件及文件夹
void traverse_folder(char *folder_path) {
    DIR *dir;
    struct dirent *dir_info;
    char sub_folder_path[256] = {0}; // 文件夹路径
    dir = opendir(folder_path);
    if (dir) {
        while ((dir_info = readdir(dir)) != NULL) {
            if (strcmp(dir_info->d_name, ".") == 0 || strcmp(dir_info->d_name, "..") == 0) {
                continue;
            }
            printf("%s/%s\n", folder_path, dir_info->d_name);
            if (dir_info->d_type == DT_DIR) {
                sprintf(sub_folder_path, "%s/%s", folder_path, dir_info->d_name);
                traverse_folder(sub_folder_path);
            }
        }
        closedir(dir);
    }
}

int main() {
    traverse_folder("/path/to/folder"); // 文件夹路径
    return 0;
}

     
    
   
  

以上代码将输出指定文件夹下的所有文件和文件夹路径。

三、C语言遍历文件夹下所有文件名

如果只需要遍历文件夹下的所有文件名,可以将文件名存储在数组中。具体实现步骤如下:

#include 
#include 
   
#include 
    
#include 
     

// 遍历文件夹下所有文件名
void traverse_folder(char *folder_path, char file_name_array[][256], int *file_count) {
    DIR *dir;
    struct dirent *dir_info;
    char sub_folder_path[256] = {0}; // 文件夹路径
    dir = opendir(folder_path);
    if (dir) {
        while ((dir_info = readdir(dir)) != NULL) {
            if (strcmp(dir_info->d_name, ".") == 0 || strcmp(dir_info->d_name, "..") == 0) {
                continue;
            }
            if (dir_info->d_type == DT_DIR) {
                sprintf(sub_folder_path, "%s/%s", folder_path, dir_info->d_name);
                traverse_folder(sub_folder_path, file_name_array, file_count);
            } else if (dir_info->d_type == DT_REG) {
                strcpy(file_name_array[*file_count], dir_info->d_name);
                (*file_count)++;
            }
        }
        closedir(dir);
    }
}

int main() {
    char file_name_array[1000][256] = {0}; // 文件名数组,最多存1000个文件名
    int file_count = 0;
    traverse_folder("/path/to/folder", file_name_array, &file_count); // 文件夹路径
    for (int i = 0; i < file_count; i++) {
        printf("%s\n", file_name_array[i]);
    }
    return 0;
}

     
    
   
  

以上代码将输出指定文件夹下的所有文件名。

四、遍历文件夹下的所有文件夹名称

如果只需要遍历文件夹下的所有文件夹名称,可以将文件夹名称存储在数组中。具体实现步骤如下:

#include 
#include 
   
#include 
    
#include 
     

// 遍历文件夹下所有文件夹名称
void traverse_folder(char *folder_path, char folder_name_array[][256], int *folder_count) {
    DIR *dir;
    struct dirent *dir_info;
    char sub_folder_path[256] = {0}; // 文件夹路径
    dir = opendir(folder_path);
    if (dir) {
        while ((dir_info = readdir(dir)) != NULL) {
            if (strcmp(dir_info->d_name, ".") == 0 || strcmp(dir_info->d_name, "..") == 0) {
                continue;
            }
            if (dir_info->d_type == DT_DIR) {
                strcpy(folder_name_array[*folder_count], dir_info->d_name);
                (*folder_count)++;
                sprintf(sub_folder_path, "%s/%s", folder_path, dir_info->d_name);
                traverse_folder(sub_folder_path, folder_name_array, folder_count);
            }
        }
        closedir(dir);
    }
}

int main() {
    char folder_name_array[1000][256] = {0}; // 文件夹名称数组,最多存1000个文件夹名称
    int folder_count = 0;
    traverse_folder("/path/to/folder", folder_name_array, &folder_count); // 文件夹路径
    for (int i = 0; i < folder_count; i++) {
        printf("%s\n", folder_name_array[i]);
    }
    return 0;
}

     
    
   
  

以上代码将输出指定文件夹下的所有文件夹名称。

五、Shell遍历文件夹下所有文件

Shell语言也可以遍历文件夹下所有文件。具体实现步骤如下:

#!/bin/bash

# 遍历文件夹下所有文件
function traverse_folder() {
    for file in "$1"/*
    do
        if [ -d "$file" ]; then
            traverse_folder "$file"
        elif [ -f "$file" ]; then
            echo "$file"
        fi
    done
}

traverse_folder "/path/to/folder" # 文件夹路径

以上代码将输出指定文件夹下的所有文件名。

六、C++遍历文件夹

C++语言也可以遍历文件夹。具体实现步骤如下:

#include 
#include 
   
namespace fs = std::filesystem;

// 遍历文件夹
void traverse_folder(const std::string &folder_path) {
    for (const auto &entry : fs::directory_iterator(folder_path)) {
        if (entry.is_directory()) {
            traverse_folder(entry.path().string());
        } else if (entry.is_regular_file()) {
            std::cout << entry.path().string() << std::endl;
        }
    }
}

int main() {
    traverse_folder("/path/to/folder"); // 文件夹路径
    return 0;
}

   
  

以上代码将输出指定文件夹下的所有文件名。