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

C++如何判断一个给定的路径是文件还是目录?请给出思路,需要用到的库函数,以及需要包含的库文件。另外请教如何遍历一个目录下的所有文件,包含子目录。也请给出思路。具体算法不要求贴出。

文件结构有一个属性,对应着一个宏。查找文件时得到文件结构,可以判断这个属性是不是目录。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-05-10
GetFileAttributes 返回FILE_ATTRIBUTE_DIRECTORY就是目录
自己查下MSDN吧

遍历目录用FindFirstFile、FindNextFile、FindClose

参考资料:http://blog.csdn.net/sunyanay/article/details/6203323

本回答被网友采纳
第2个回答  2012-07-29
------------------------------------------------------------------------------------
No.4 /*文件处理之浏览文件*/
#include <commdlg.h>
1.定义:
OPENFILENAME file={0};
2.为file.lpstrFile申请空间:
char lpPath[260]={0};
file.lpstrFile=lpPath;
3.为file赋其他初值:
file.lStructSize=sizeof(OPENFILENAME);
file.lpstrFile=lpPath;
file.nMaxFile=260;
file.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files\0*.*\0\0";
file.nFilterIndex=1;
4.调用GetOpenFileName函数:
if(GetOpenFileName(&file)!=0)
{...};
就可得到文件名,在lpPath所指字符串中。
------------------------------------------------------------------------------------
No.5 /*文件处理之搜索文件*/
#include <afx.h>
1.初始化,设置搜索条件(路径,后缀名等,例中由dir决定):
CFileFind ff;
CString dir("D:\\MyDir\\*.txt");
BOOL bfile=ff.FindFile(dir);
2.循环调用ff.FindNextFile函数进行搜索:
while(bfile)
{
bfile=ff.FindNextFile();
if(!(ff.IsDots())&&!(ff.IsDirectory()))
{...};
};
3.搜索结果有三种:
(1)Dots: "."表示本层目录,".."表示上一层目录,此时ff.IsDots()返回值为TRUE;
(2)Directory: 子目录,此时ff.IsDirectory()返回值为TRUE;
(3)文件
4.对每个查找到的文件可以查看文件信息:
(1)BOOL GetCreationTime(CTime &); 或BOOL GetCreationTime(FILETIME*);
BOOL GetLastAccessTime(CTime &); 或BOOL GetLastAccessTime(FILETIME*);
BOOL GetLastWriteTime(CTime &); 或BOOL GetLastWriteTime(FILETIME*);
(2)CString GetFileName(); //文件名.后缀名
(3)CString GetFilePath(); //全路径+文件名.后缀名
(4)CString GetFileTitle(); //只有文件名
(5)CString GetRoot();
(6)DWORD GetLength(); 或__int64 GetLength64();
(7)BOOL IsHidden();
BOOL IsNormal();
BOOL IsReadOnly();
BOOL IsSystem();
BOOL IsTemporary();
------------------------------------------------------------------------------------
No.6 /*文件处理之一般处理*/
#include <winbase.h>
1.进入文件夹(设置工作文件夹):
chdir(LPTSTR path);
SetCurrentDirectory(LPCTSTR lpPathName);
2.文件删除:
BOOL DeleteFile(LPTSTR lpFileName);
3.文件复制:
BOOL CopyFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,BOOL bFailIfExists);其中参数bFailIfExists告诉系统当目标文件存在时如何操作,当bFailIfExists为true时,如果目标文件存在,则函数执行失败;当bFailIfExists为false时,如果目标文件存在,则覆盖目标文件。
4.文件重命名:
BOOL RenameFile(const AnsiString OldName, const AnsiString NewName);
5.返回文件的完整的路径名和文件名:
AnsiString ExpandFileName(AnsiString FileName);
6.返回指定文件的文件名:
AnsiString ExtractFileName(AnsiString FileName);
7.返回指定文件的扩展名:
AnsiString ExtractFileExt(AnsiString FileName);
8.创建新文件夹:
BOOL CreateDirectory( LPCTSTR lpPathName,LPSECURITY_ATTRIBUTES lpSecurityAttributes);lpSecurityAttributes为安全属性。
9.移动存在的文件或目录:
BOOL MoveFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName);
10.创建文件(即打开文件):
CreateFile(...);
11.关闭文件:
CloseHandle();

/********版权所有,抄袭必究********/
/********sunlight12346*********/本回答被网友采纳
相似回答