如何在没有dirent.h的情况下访问C90中的目录?

时间:2011-01-03 16:59:58

标签: c filesystems directory c89 cvi

我在C90的基础上在LabCVI工作。

手头的坦克是在“.. \ data”“目录和子目录中找到”* .spec“文件的绝对路径。

我知道有解释如何用dirent.h做到这一点,但我需要在没有dirent.h的情况下做到这一点。这个(part Ipart II)教程不是我想要的。 LabCVI没有dirent标头,我无法从Internet导入ist,因为dirent.h的依赖项与LabCVI不兼容。

我计划在杀死LabCVI的所有依赖项后迁移到更好的IDE /语言,但是我必须将代码保留到当天。所以我不能使用LabCVI的目录实用程序。

我如何解决这个问题并获取我的目录访问权限? (该代码将在XP Machines上运行。)

3 个答案:

答案 0 :(得分:4)

C语言本身没有目录概念,因此无法列出或访问它们。如果您的系统不符合更高级别的标准,如POSIX(指定dirent.h),那么您将需要寻找特定于系统的解决方案。

答案 1 :(得分:1)

您可以使用FindFirstFile和类似功能执行此操作。 请查看此示例代码以获取更多详细信息:http://msdn.microsoft.com/en-us/library/aa365200%28v=vs.85%29.aspx

答案 2 :(得分:1)

维克拉姆的回答让我写了这个我用过的代码片段。

void findSpecFilesAndPrint(void){
    HANDLE hFind;
    WIN32_FIND_DATA FindFileData;

    hFind = FindFirstFile("*.*", &FindFileData);
    if (hFind == INVALID_HANDLE_VALUE){ 
        //FOUND NO FILE
        printf("No file found.\n");
    }
    else {
        printf("Files found - one function to find them all.\n");
        do{
            //DO THIS WITH ALL FILES FOUND
            printf(FindFileData.cFileName);
            printf("\n");
        }while (FindNextFile(hFind, &FindFileData) != 0);
        printf("And in the darkness bind them.\n");
        FindClose(hFind);
    }
}

查找当前目录中的所有文件