C语言 为什么我的扫描与readdir不忽略目录



这是一段看起来很奇怪的C代码。由于一些奇怪的原因,DT_DIR应该忽略文件夹,但它没有:

char** getFiles(char* pathToScan, int size)
{
    DIR *d;
    struct dirent *dir;
    char** filesName;
    int i=0;
    filesName = malloc(sizeof(char*)*size);
    d = opendir(pathToScan);
    if (d)
    {
        while ((dir = readdir(d)) != NULL)
        {
            if (dir->d_type != DT_DIR)
            {
                *(filesName + i-2) = malloc(sizeof(char)*strlen(pathToScan) + sizeof(char)*strlen(dir->d_name));
                strcpy(*(filesName + i-2), pathToScan);
                strcat(*(filesName + i-2), "\");
                strcat(*(filesName + i-2), dir->d_name);
            }
            i++;
        }
        closedir(d);
    }
    return filesName;
    }
  • 如果我在文件中添加我扫描的文件夹,程序会崩溃。
  • 如果我扫描的文件夹中没有文件夹,它工作得很好。

我的第一个想法是DT_DIR有问题(阅读DT_DIR),但我不知道该怎么做。

怎么回事?为什么DT_DIR不忽略文件夹?

我将大小理解为要返回的文件数量的限制。asprintf似乎更简单

#include <stdio.h>                                                             
#include <stdlib.h>                                                            
#include <string.h>                                                            
#include <dirent.h>                                                            
static char** getFiles(char* pathToScan, int *size)                            
{                                                                              
    DIR *d;                                                                    
    struct dirent *dir;                                                        
    char** filesName;                                                          
    char *f;                                                                   
    int i = 0;                                                                 
    filesName = malloc(sizeof(char*) * *size);                                 
    d = opendir(pathToScan);                                                   
    if (d)                                                                     
    {                                                                          
        while ((dir = readdir(d)) != NULL && i < *size)                        
        {                                                                      
            if (dir->d_type != DT_DIR)                                         
            {                                                                  
                char file[PATH_MAX];                                           
                snprintf(file, sizeof(file), "%s\%s",                         
                         pathToScan, dir->d_name);                             
                filesName[i++] = strdup(file);                   
                filesName[i++] = f;                                            
            }                                                                  
        }                                                                      
        closedir(d);                                                           
    }                                                                          
    *size = i;                                                                 
    return filesName;                                                          
}

使用示例:

int main(void) {                                                               
   int n = 10;                                                                 
   char **files = getFiles("/home/foo", &n);                                 
   for (int i = 0; i < n; i++) {                                               
       printf("%sn", files[i]);                                               
   }                                                                           
}  

相关内容

  • 没有找到相关文章

最新更新