0

ファイルを除くフォルダー内のディレクトリの数を取得しようとしていますが、正しい結果が得られません。誰かがこの問題を解決するのを手伝ってくれますか? 特に isDirectory() 関数には何を送信すればよいですか?

int listFilesIndir(char *currDir) 
{
    struct dirent *direntp;


    DIR *dirp;
    int x ,y =0 ;


    if ((dirp = opendir(currDir)) == NULL) 
    {
        perror ("Failed to open directory");
        return 1;
    }

    while ((direntp = readdir(dirp)) != NULL)
    {
        printf("%s\n", direntp->d_name);
        x= isDirectory(dirp);
        if(x != 0)
            y++;
    }
    printf("direc Num : %d\n",y );

    while ((closedir(dirp) == -1) && (errno == EINTR)) ;

    return 0;
}


int isDirectory(char *path) 
{
    struct stat statbuf;

    if (stat(path, &statbuf) == -1)
        return 0;
    else 
        return S_ISDIR(statbuf.st_mode);
}
4

2 に答える 2

1

関数にディレクトリ ストリームを送信し、それをパスのように扱っています。

Linux およびその他の一部の Unix システムには、この情報を直接取得する方法が含まれています。

while ((direntp = readdir(dirp)) != NULL)
{
    printf("%s\n", direntp->d_name);
    if (direntp->d_type == DT_DIR)
       y++;
}

それ以外の場合は、関数に正しい詳細を送信するようにしてください。

x= isDirectory(direntp->d_name);
于 2013-04-01T20:51:01.203 に答える