MFC中是否有与Java File方法 isDirectory()相同的内容?我试过用这个:
static bool isDirectory(CString &path) {
return GetFileAttributes(path) & FILE_ATTRIBUTE_DIRECTORY;
}
但它似乎不起作用。
答案 0 :(得分:4)
http://msdn.microsoft.com/en-us/library/scx99850(VS.80).aspx
编辑:
#include <afxwin.h>
#include <iostream>
using namespace std;
CFileFind finder;
fileName += _T("c:\\aDirName");
if (finder.FindFile(fileName))
{
if (finder.FindNextFIle())
{
if (finder.IsDirectory())
{
// Do directory stuff...
}
}
}
如果更改文件名以使用通配符,则可以执行
while(finder.findNextFile()) {...
获取所有匹配的文件。
答案 1 :(得分:2)
对于问题的答案可能“不一致”感到抱歉,但可能你会发现它很有用,因为我在Windows中需要这样的东西我不是在使用MFC而是常规的Windows API:
//not completely tested but after some debug I'm sure it'll work
bool IsDirectory(LPCTSTR sDirName)
{
//First define special structure defined in windows
WIN32_FIND_DATA findFileData; ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA));
//after that call WinAPI function finding file\directory
//(don't forget to close handle after all!)
HANDLE hf = ::FindFirstFile(sDirName, &findFileData);
if (hf == INVALID_HANDLE_VALUE) //also predefined value - 0xFFFFFFFF
return false;
//closing handle!
::FindClose(hf);
// true if directory flag in on
return (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
}
答案 2 :(得分:1)
按要求提供MFC解决方案: a_FSItem路径或要测试的项目(检查CFile :: GetStatus()以获取所需的要求)。
CFileStatus t_aFSItemStat;
CFile::GetStatus( a_FSItem, t_aFSItemStat );
if ( ( t_aFSItemStat.m_attribute & CFile::directory )
return true;
return false;
如果您希望将卷根包含为有效目录,只需将其添加到测试
即可t_aFSItemStat.m_attribute & CFile::volume
答案 3 :(得分:1)
它不是MFC,但我用它:
bool IsValidFolder(LPCTSTR pszPath)
{
const DWORD dwAttr = ::GetFileAttributes(pszPath);
if(dwAttr != 0xFFFFFFFF)
{
if((FILE_ATTRIBUTE_DIRECTORY & dwAttr) &&
0 != _tcscmp(_T("."), pszPath) &&
0 != _tcscmp(_T(".."), pszPath))
{
return true;
}
}
return false;
}