繁体   English   中英

如何仅从 C 中的目录中列出用户提供的文件名?

[英]How to list only user provided file names from the directory in C?

我知道如何打印目录中的所有文件,但是如何使用用户之前提供的名称在该目录中找到一个特定文件?

#include <dirent.h>
#include <stdio.h>

int main(void)
{
    DIR *d;
    struct dirent *dir;
    char a,b;
    printf("Path:(eg.c:/): ");
    scanf("%s",&a);
    d = opendir (&a);
    if (d)
    {
        while ((dir = readdir(d)) != NULL)
        {
            printf("%s\n", dir->d_name);
        }
        closedir(d);
    }
    return(0);
}

来自评论:
我想知道如何在我的代码中实现这一点,因为我从未使用过这些函数

由于您使用的是 Windows,因此FindFirstFileFindNextFile可用于在目录中搜索filespecs列表,从那里您可以简单地使用strstr通过将搜索结果与用户所需的文件名进行比较来隔离所需的文件。

这是一个可以根据您的目的进行修改的示例:

#include <stdio.h>
#include <string.h>
#include <windows.h>

void find(char* path,char* file)
{
    static int found =0;
    HANDLE fh;
    WIN32_FIND_DATA wfd;
    int i=0;
    int j=0;
    fh=FindFirstFile(path,&wfd);
    if(fh)
    {
        if(strcmp(wfd.cFileName,file)==0)
        {
            path[strlen(path)-3]='\0';
            strcat(path,file);
            FindClose(fh);
            return;
        }
        else
        {
            while(FindNextFile(fh,&wfd) && found ==0)
            {              
                if(strcmp(wfd.cFileName,file)==0)
                {
                    path[strlen(path)-3]='\0';
                    strcat(path,file);
                    FindClose(fh);
                    found =1;
                    return;
                }
                if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
                    strcmp(wfd.cFileName,"..")!=0 && strcmp(wfd.cFileName,".")!=0)
                {
                    path[strlen(path)-3]='\0';
                    strcat(path,wfd.cFileName);
                    strcat(path,"\\*.*");
                    find(path,file);
                }
            }

            if(found==0)
                {
                for(i=strlen(path)-1;i>0;i--)
                {
                    if(j==1 && path[i]=='\\')
                    {
                        path[i]='\0';
                        strcat(path,"\\*.*");
                        break;
                    }
                    if(path[i]=='\\')
                        j=1;
                }
            }
        }
        FindClose(fh);
    }



}

int main()
{
    TCHAR path[512] = "C:\\*.*";
    find(path,"notepad.exe");
    printf("%s\n",path);

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM