"我的文档""My Documents"文件夹的文件属性是什么?不是FILE_ATTRIBUTE_DIRECTORY。在使用 FindFirstFile() 时,会返回WIN32_FIND_DATA结构,其中的dwFileAttributes是预定义的值:FILE_ATTRIBUTE_ARCHIVE,FILE_ATTRIBUTE_COMPRESSED,FILE_ATTRIBUTE_DIRECTORY,FILE_ATTRIBUTE_ENCRYPTED,FILE_ATTRIBUTE_HIDDEN,FILE_ATTRIBUTE_NORMAL等。
经测试 My Documents,收藏夹,SendTo 等文件夹的属性不是FILE_ATTRIBUTE_DIRECTORY???!!
它们的的属性是哪一个呢?????怎样才能找到dwFileAttributes预定义的值:FILE_ATTRIBUTE_ARCHIVE,FILE_ATTRIBUTE_COMPRESSED等在定义时所对应的值,也就是在哪里可以找到它们的定义源码???

解决方案 »

  1.   

    利用FindFirstFile和FindNextFile得到的WIN32_FIND_DATA结构体对象中填充了文件的信息,其中wFileAttributes是一个DWORD值,而文件属性也是,下面是文件属性的宏定义:
    #define FILE_SHARE_READ                 0x00000001  
    #define FILE_SHARE_WRITE                0x00000002  
    #define FILE_SHARE_DELETE               0x00000004  
    #define FILE_ATTRIBUTE_READONLY             0x00000001  
    #define FILE_ATTRIBUTE_HIDDEN               0x00000002  
    #define FILE_ATTRIBUTE_SYSTEM               0x00000004  
    #define FILE_ATTRIBUTE_DIRECTORY            0x00000010  
    #define FILE_ATTRIBUTE_ARCHIVE              0x00000020  
    #define FILE_ATTRIBUTE_ENCRYPTED            0x00000040  
    #define FILE_ATTRIBUTE_NORMAL               0x00000080  
    #define FILE_ATTRIBUTE_TEMPORARY            0x00000100  
    #define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200  
    #define FILE_ATTRIBUTE_REPARSE_POINT        0x00000400  
    #define FILE_ATTRIBUTE_COMPRESSED           0x00000800  
    #define FILE_ATTRIBUTE_OFFLINE              0x00001000  
    #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  0x00002000  
    #define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001   
    #define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002   
    #define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004   
    #define FILE_NOTIFY_CHANGE_SIZE         0x00000008   
    #define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010   
    #define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020   
    #define FILE_NOTIFY_CHANGE_CREATION     0x00000040   
    #define FILE_NOTIFY_CHANGE_SECURITY     0x00000100   
    #define FILE_ACTION_ADDED                   0x00000001   
    #define FILE_ACTION_REMOVED                 0x00000002   
    #define FILE_ACTION_MODIFIED                0x00000003   
    #define FILE_ACTION_RENAMED_OLD_NAME        0x00000004   
    #define FILE_ACTION_RENAMED_NEW_NAME        0x00000005   
    #define MAILSLOT_NO_MESSAGE             ((DWORD)-1) 
    #define MAILSLOT_WAIT_FOREVER           ((DWORD)-1) 
    #define FILE_CASE_SENSITIVE_SEARCH      0x00000001  
    #define FILE_CASE_PRESERVED_NAMES       0x00000002  
    #define FILE_UNICODE_ON_DISK            0x00000004  
    #define FILE_PERSISTENT_ACLS            0x00000008  
    #define FILE_FILE_COMPRESSION           0x00000010  
    #define FILE_VOLUME_QUOTAS              0x00000020  
    #define FILE_SUPPORTS_SPARSE_FILES      0x00000040  
    #define FILE_SUPPORTS_REPARSE_POINTS    0x00000080  
    #define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100  
    #define FILE_VOLUME_IS_COMPRESSED       0x00008000  
    #define FILE_SUPPORTS_OBJECT_IDS        0x00010000  
    #define FILE_SUPPORTS_ENCRYPTION        0x00020000
      

  2.   

    Header: Declared in Winbase.h; include Windows.h.
      

  3.   

    当然是文件夹,也许是你判断文件夹的方法错误了,不能用如下语句:
    WIN32_FIND_DATA fd;if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)  //不能这样
    应该这样:
    if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
      

  4.   

    楼上说的对,我正是错在这儿。
    请再帮忙解释一下 fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY 的含义?
      

  5.   

    我很菜,fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY 和fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY 又有什么不同呢?按位与操作的结果是什么?为什么用==不行?什么情况下用&而不用==?
      

  6.   

    这只我自己理解的,仅一家之言:)就像工具条按钮或窗口的风格属性一样。dwFileAttributes是用bit位的组合来表示各种属性,这样各种属性这可以叠加了。如一个文件夹即可以是FILE_ATTRIBUTE_DIRECTORY 同时也可能只读FILE_ATTRIBUTE_READONLY,那么这个dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY。显然(dwFileAttributes 不等于 FILE_ATTRIBUTE_DIRECTORY ),所以用(fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )等于False。而用按位与操作可以得到正确结果。至于按位与和按位或的操作我想你可找一些基础的书看看。
      

  7.   

    多谢楼上!!!
    怎么才能知道在win32中的哪些值需要用 & 运算呢?
      

  8.   

    呵呵,我也菜。仔细研究MSDN,加上一些经验吧