1

MFCの Java ファイル メソッドisDirectory()に相当するものはありますか? 私はこれを使ってみました:


static bool isDirectory(CString &path) {
  return GetFileAttributes(path) & FILE_ATTRIBUTE_DIRECTORY;   
}

しかし、うまくいかないようです。

4

4 に答える 4

4

CFileFind::IsDirectory()

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()) {...

一致するすべてのファイルを取得します。

于 2008-12-08T20:43:01.443 に答える
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;
}
于 2008-12-08T22:35:48.440 に答える
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
于 2009-06-30T03:59:26.683 に答える
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;
}
于 2009-07-03T03:12:42.443 に答える