从文件夹中检索文件的属性

时间:2014-10-20 10:12:00

标签: c readdir

我正在做一项任务,要求我创建一个类似于ls的函数。 我的代码工作正常但是在实现

的行为时
ls -l child //where child is a folder

有一种奇怪的行为。

让我们说我在父母的文件夹中#39;在其中我有一个子文件夹,'孩子'其中包含一些文本文件。当我从父文件夹运行我的程序时,它找到该文件夹​​并打印出其中的文本文件的属性。但是,只有在父文件夹中存在相同的文件时,它才会打印子文件夹中的文件。

以下是我正在使用的代码片段,

    char CurrDir[100];
    DIR *pDir = NULL;
    struct dirent *pFileNames = NULL;

    getcwd(CurrDir, sizeof(CurrDir))

    strncat(CurrDir, "/", strlen(CurrDir));

    unsigned int CurrDirLen = strlen(CurrDir);
    unsigned int CombSize = CurrDirLen + strlen(argv[1]);

    char SuperCharArr[CombSize];

    for(int i = 0; i < CombSize; ++i)
    {
        if( i < strlen(CurrDir) )
            SuperCharArr[i] = CurrDir[i];
        else
            SuperCharArr[i] = argv[1][i%CurrDirLen];
    }//for

    //insert null character at the end of the character
    SuperCharArr[CombSize] = '\0';

    pDir = opendir( SuperCharArr );
    printf("%s\n", SuperCharArr);

    if( pDir != NULL )
    {
        //Directory detected as pDir is a DirectoryStream
        printf("%s\n", "pDir not null");
        PrintHeader();

        while( (pFileNames = readdir(pDir)) != NULL )
        {
            PrintFileDeails(pFileNames);
        }
    }//if

1 个答案:

答案 0 :(得分:1)

在我发布的原始代码中,有一个名为PrintFileDeails(pFileNames)的函数,它接受直接类型的参数。

在PrintFileDeails()中,有一个函数可以检查文件的状态,代码如下,

struct stat FileStat;

if( stat(pFileNames->d_name, &FileStat) == -1 )
{
    perror("stat");
    exit(EXIT_FAILURE);
}//if

这行代码会打印出一个无法找到文件的错误,而AAT的评论让我再次通过我的代码,因为我怀疑它没有读取正确的文件夹。因此,在我通过它应该从哪里读取文件的完整路径后,它工作正常。因此,代码改为此。

if( stat(pFullPath, &FileStat) == -1 )
{
    perror("stat");
    exit(EXIT_FAILURE);
}//if

其中pFullPath传递了SuperCharArr的变量,其中包含要搜索的文件所在的完整路径。

stat()的手册页也有帮助,可以找到here