自从c++17中引入了filesystem 点击这里查看,这个问题变得简单了。filesystem功能强大,是c++程序员的福利,值得看看。实际上filesystem一早就引入到了boost库中,从c++17开始成为c++标准的一部分。
刚工作的时候,先开始写的是MFC的代码,现在想必用MFC的人已经很少了吧,下边是当时的做法,
MFC 中判断文件是否存在可使用以下代码:
BOOL PathExist(CString sPath)
{
DWORD dwAttr = GetFileAttributes(sPath) ;
if(dwAttr&FILE_ATTRIBUTE_DIRECTORY)
{
return TRUE;
}
else
{
return FALSE;
}
}
GetFileAttributes函数返回目录或者文件的属性,返回值与FILE_ATTRIBUTE_DIRECTORY & 不为0,则spath为文件目录。FILE_ATTRIBUTE_DIRECTORY的值为16(0x00000010)
那么是否可以直接将上述代码中的第三行改为判断是否相等呢?
BOOL PathExist(CString sPath)
{
DWORD dwAttr = GetFileAttributes(sPath) ;
if(dwAttr==FILE_ATTRIBUTE_DIRECTORY)
{
return TRUE;
}
else
{
return FALSE;
}
}
最好不要这么做。因为GetFileAttributes函数返回时众多属性中的一个或者多个,例如对于C:\Users\zhangsanfeng目录(XP下为C:\Documents and Settings\zhangsanfeng)
后者返回的是16,这么判断没有错。但是前者返回的是17 即FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_DIRECTORY,文件目录存在但是是只读的。
当然可以直接用一个函数PathFileExists判断也可以。