#pragma   comment(lib,"shlwapi.lib")   
#include <windows.h>
#include <shlwapi.h>
#include <stdio.h>int main()
{
char str1[100] = "C:\\temp1"; //exist
if(PathIsDirectory(str1)==TRUE)
printf("%s\n","YES");
else printf("%s\n","NO"); char str2[100] = "C:\\temp2";//not exist
if(PathIsDirectory(str2)==TRUE)
printf("%s\n","YES");
else printf("%s\n","NO");
}目录C:\temp1是存在的,C:\temp2不存在,为何结果都是NO呢

解决方案 »

  1.   

    目录还是文件?  
    试试   C:\\temp1\\ PathIsDirectory
    Verifies that a path is a valid directory.
      

  2.   

    PathIsDirectory是检测文件目录是否存在,不是检测文件的
      

  3.   

    c:\temp1\就是目录的丫 结果也是一样
      

  4.   

    用if(PathIsDirectory(str1))不要用if(PathIsDirectory(str1)==TRUE)
      

  5.   

    汗~~老哥,难道你发现了msdn文档的一个bug?
    msdn是这样说的  Returns TRUE if the path is a valid directory (FILE_ATTRIBUTE_DIRECTORY is set), or FALSE otherwise.但是实际上是返回FILE_ATTRIBUTE_DIRECTORY(0x0000010)所以,要想正确的话,需要跟FALSE比,而不是和TRUE
    不过,从另外一个意义上讲msdn也没错:因为非FALSE即为TRUE,所以。。 。。
    唉,纠结的宏定义啊,附上正确运行的代码#pragma   comment(lib,"shlwapi.lib")   
    #include <windows.h>
    #include <shlwapi.h>
    #include <stdio.h>int main()
    {
    char str1[100] = "C:\\temp1"; //exist
    if(!PathIsDirectoryA(str1))
    printf("%s\n","NO");
    else printf("%s\n","YES"); char str2[100] = "C:\\temp2";//not exist
    if(!PathIsDirectoryA(str2))
    printf("%s\n","NO");
    else printf("%s\n","YES");
    }
      

  6.   

    不死心,又去看了web的msdn,果然有人comments,微软不闻不问啊。。 。。http://msdn.microsoft.com/en-us/library/bb773621(VS.85).aspx
      

  7.   

    看了下 还真是msdn说明有问题
    不过一般都是说return a non-zero value if xxx,很少有直接说return TRUE的。
    看下这个函数里面的实现:.text:770F4299                 push    esi             ; lpFileName
    .text:770F429A                 call    ds:__imp__GetFileAttributesA@4 ; GetFileAttributesA(x)
    .text:770F42A0                 cmp     eax, 0FFFFFFFFh
    .text:770F42A3                 jz      short loc_770F42AA
    .text:770F42A5                 and     eax, 10h <------ 就这儿了
    .text:770F42A8                 jmp     short loc_770F42AC
    .text:770F42AA ; ---------------------------------------------------------------------------
    .text:770F42AA
    .text:770F42AA loc_770F42AA:                           ; CODE XREF: PathIsDirectoryA(x)+5Ej
    .text:770F42AA                                         ; PathIsDirectoryA(x)+6Cj ...
    .text:770F42AA                 xor     eax, eax
    .text:770F42AC
    .text:770F42AC loc_770F42AC:                           ; CODE XREF: PathIsDirectoryA(x)+F9j
    .text:770F42AC                                         ; PathIsDirectoryA(x)+112j
    .text:770F42AC                 mov     ecx, [ebp+var_4]
    .text:770F42AF                 pop     esi
    .text:770F42B0                 pop     ebx
    .text:770F42B1                 call    @__security_check_cookie@4 ; __security_check_cookie(x)
    .text:770F42B6                 leave
    .text:770F42B7                 retn    4
    .text:770F42B7 _PathIsDirectoryA@4 endp
      

  8.   


    谢谢,呵呵,我也是被msdn给误导的
      

  9.   


    原来是GetFileAttributes,看到10h好像在哪见到过~~
      

  10.   

    #define FILE_ATTRIBUTE_DIRECTORY 0x00000010