#include <windows.h>
#include <stdio.h>
void main()
{
char szBuffer[1024] = "D:\\pagefile.sys";//为什么会是文件夹,哪里出错了吗?
DWORD dwAttrib = GetFileAttributes(szBuffer);
if (FILE_ATTRIBUTE_DIRECTORY & dwAttrib)
{
printf("folder\n");
}
else
{
printf("file\n");
}
}

解决方案 »

  1.   

    if (FILE_ATTRIBUTE_DIRECTORY == dwAttrib)
      

  2.   

    FindFirstFile等查找,然后比较属性
      

  3.   

    你看看返回值是不是INVALID_FILE_ATTRIBUTES,如果是用GetLastError看看Error Code。
    或者在Watch输入@err,hr看看出错的描述。
      

  4.   

    pagefile.sys文件正在被使用,访问不了,GetFileAttributes失败,返回INVALID_FILE_ATTRIBUTES
      

  5.   

    哪也没出错。在文件系统中 文件夹一定有FILE_ATTRIBUTE_DIRECTORY 属性,但是有FILE_ATTRIBUTE_DIRECTORY 属性的不一定就是文件夹。
      

  6.   

    MFC的CFileFind::IsDirectory为什么可以正确区分呢??
    我看了下源代码,好像也没有什么特别处理的地方呀!!!
      

  7.   

    if ((FILE_ATTRIBUTE_DIRECTORY & dwAttrib) == FILE_ATTRIBUTE_DIRECTORY)
    这样就行了
      

  8.   

    GetFileAttributes够用了,没有必要用mfc的类
      

  9.   

    改成((FILE_ATTRIBUTE_DIRECTORY &amp; dwAttrib) == FILE_ATTRIBUTE_DIRECTORY)。
    "D:\\pagefile.sys"还是打印folder呀
      

  10.   

    我的VC6报错,INVALID_FILE_ATTRIBUTES未知标识符!
      

  11.   

    GetLastError得到错误信息是:另一个程序正在使用此文件,进程无法访问。
      

  12.   

    换了VC2005测试了下,你是对的.
    可是MFC的CFileFind::IsDirectory为什么可以正确区分呢??
      

  13.   

    PathIsDirectory这个函数也可以,不知道为毛GetFileAttributes不行,可以深入挖掘一下
      

  14.   

    谢谢hellward,PathIsDirectory可以用的!谁能给我说下可是MFC的CFileFind::IsDirectory为什么可以正确的判断pagefile.sys是文件呢??
      

  15.   

    PathIsDirectory();
    或者CreateFile函数返回的HANDLE传递给GetFileInformationByHandle()函数,根据该函数的BY_HANDLE_FILE_INFORMATION这个结构体中的成员来判断也可以
      

  16.   


    BOOL CFileFind::MatchesMask(DWORD dwMask) const
    {
    ASSERT(m_hContext != NULL);
    ASSERT_VALID(this); if (m_pFoundInfo != NULL)
    return (!!(((LPWIN32_FIND_DATA) m_pFoundInfo)->dwFileAttributes & dwMask));
    else
    return FALSE;
    }_AFX_INLINE BOOL CFileFind::IsDirectory() const
    { return MatchesMask(FILE_ATTRIBUTE_DIRECTORY); }CFileFind::IsDirectory源代码,也不过是用GetFileAttributes的呀!!!
      

  17.   

    是我看错了,CFileFind::IsDirectory源代码没有用GetFileAttributes,是用FileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY的。
    通过查找的方法可以正确的判断pagefile.sys是文件了.看来GetFileAttributes不是很可靠呀!!
      

  18.   

    貌似GetFileAttributes的权限不够,这个你去研究研究,呵呵,并不是说GetFileAttributes不可靠,只是pagefile.sys这个系统文件比较神秘
      

  19.   

    还是楼主你用法的问题。你的情况是返回了INVALID_FILE_ATTRIBUTES。
    既然已经出错,所以后面的判断自然不成功喽。。