当前位置:编程学习 > C/C++ >>

C++ 如何判断路径是文件还是目录

C++如何判断一个给定的路径是文件还是目录?请给出思路,需要用到的库函数,以及需要包含的库文件。
另外请教如何遍历一个目录下的所有文件,包含子目录。也请给出思路。具体算法不要求贴出。
补充:比如我用FindFirstFile("e:\\program\\c", &fd),这个其实是对C所包含的内容进行判断,也就是说已经首先认定C是一个文件夹,而不是文件。现在我想做的是判断C是文件夹,还是文件。也就是说,我的问题在,如果用FindFirstFile()函数,它是搜索我指定的一个路径的内容,但是我想实现的是判断一个指定的路径本身,而不是它的内容。这个问题。不知道我有没有解释清楚。。。
追问:恩,这两个函数我看过了。FindFirstFile("e:\\*.*", &fd)这句是寻找E:盘下的文件或目录,但是我碰到的问题是这样的,已知一个路径,然后判断该路径是一个文件夹还是文件,因为有可能有些文件没有扩展名嘛。比如E:\program\c   ,现在我该如何判断这个C是否是文件还是目录呢?有没有不需要进入到C里面搜索文件来判断的方法,而是直接读取C的属性值呢?我知道如果用间接的办法是能够实现的,如果我在C里面找到了含有.或者..的表项,则表示这个C肯定是目录而不是文件。但是我想找一个更好的做法,因为,如果C是一个文件的话,我这个搜索C里面的第一个文件岂不是会出现一些问题么。
答案:第十三个FindFirstFile寻找文件以及获得文件的信息

这里举一个例子吧,列举E盘第一目录下的所有文件,包括文件夹,结合FindNextFile

#include<windows.h>
#include<stdio.h>
int main()
{
BOOL done=TRUE;
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile("e:\\*.*", &fd);//第一个参数是路径名,可以使用通配符,懂DOS的人应该知道吧!fd存储有文件的信息

while (done)
{
printf("%s\n",fd.cFileName);
done=FindNextFile(hFind, &fd); //返回的值如果为0则没有文件要寻了
}
return 0;
}

当然也可以直接找一个文件,不使用通配符,但这样有什么意义呢?,如FindFirstFile("e:\\aaa.txt",&fd);其实这个可以获取一个文件的信息,如文件是不是隐藏的,或者有没有只读属性等。

当然通过控制通配符,也可以寻找特定类型的文件,比如我只要找文本文件,那么就是这个语句FindFirstFile("e:\\*.txt",&fd);就行了,关键看你自己灵活运用。

前面说过fd里存储有文件的信息,那怎么根据fd里面的成员判断这个文件的属性,文件是否隐藏,是不是文件夹。

fd里的dwFileAttributes存储有文件的信息,如判断是否为文件夹,只要把这个变量和FILE_ATTRIBUTE_DIRECTORY进行按位与运算,如果为1的话,表明为文夹件,如if(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY==1) printf("%s是文件夹\n",fd.cFileName);

其它判断也是一样,现在给出文件的属性(常用几个):FILE_ATTRIBUTE_HIDDEN(隐藏)

FILE_ATTRIBUTE_READONLY(只读)FILE_ATTRIBUTE_SYSTEM(系统)

第十四个FindNextFile寻找文件

参照FindFirstFile函数的例子!

#include<windows.h>

判断是文件还是目录:

char *filefullname="你的路径";

 HANDLE hFile1=

CreateFile(filefullname,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 _BY_HANDLE_FILE_INFORMATION  fImfor;
 BOOL bF=GetFileInformationByHandle(hFile1,&fImfor);

if(!bf){

//文件夹

}

else {

//文件

}

 

 

/////////////////////////////////////

至于遍历文件夹的而文件及其目录可以使用递归算法,

FindFirstFile函数寻找第一个文件,并判断是不是文件,是文件夹的话进入下一层递归,FindNextFile寻找下一个文件。。好、具体这样。。代码我就不贴出来了,网上一大堆。

上一个:运用C++二分查找编译此题
下一个:c++ lIst的对象如何保存在文件中?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,