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的对象如何保存在文件中?