• io.h源码 检查文件是否存在


     请问在windows上使用什么API来检查文件是否存在? http://topic.csdn.net/u/20080929/00/48833cf7-125f-4075-881f-614a51fc3e6d.html

    搜索这个问题的时候,看到的。

    linux下直接open (filename,O_RDONLY) 返回值判断,windows下 没有这个函数?奇怪。貌似有 _open()函数,可以去msdn查去。

    查找到windows用 下面的函数就可以。filename是 char * 类型。

    if( PathFileExists(filename) ){
    return true;
    }
    return false;

    但又看到上面的 床上等你csdn 的讨论,有个io.h _access函数,定义如下。

    _Check_return_ _CRTIMP int __cdecl _access(_In_z_ const char * _Filename, _In_ int _AccessMode);

    _Check_return_ _CRT_NONSTDC_DEPRECATE(_access) _CRTIMP int __cdecl access(_In_z_ const char * _Filename, _In_ int _AccessMode);

    _AccessMode 取值代表的意思,不知道到那里查看。如果有源码也行啊,就是没有。

    既然有个 stdio.h 为什么还单独 拿出 io.h呢? 就不能整合到一起么?

    而且我做了个测试,居然有莫名其妙的错误,原来是 c:\ 要写成 c:\\

    #include <io.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    bool isFileExist(const char *filename){
        if( _access(filename, 0) == 0 ) {
            // exist
            printf("Exist %s\n",filename);
        }else{
            printf("Not exist %s\n",filename);
        }
        return true;
    }
    
    int main(){
        isFileExist("c:\\boot.ini");
        isFileExist("c:\\bootmgr");
        return 0;
    }

    测试结果:

    >gcc test.cpp

    >a
    Not exist c:\boot.ini
    Exist c:\bootmgr

    之前的错误 显示结果为:

    Not exist coot.ini
    Not exist cootmgr

    程序大小 49.3KB ,不怎么小。

    附上C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\io.h 代码 不明白,条件编译 为什么就不给代码格式化 缩进呢???

    io.h 代码查看
    /***
    *io.h - declarations for low-level file handling and I/O functions
    *
    *       Copyright (c) Microsoft Corporation. All rights reserved.
    *
    *Purpose:
    *       This file contains the function declarations for the low-level
    *       file handling and I/O functions.
    *
    *       [Public]
    *
    ****/
    
    #pragma once
    
    #ifndef _INC_IO
    #define _INC_IO
    
    #include <crtdefs.h>
    
    /*
     * Currently, all MS C compilers for Win32 platforms default to 8 byte
     * alignment.
     */
    #pragma pack(push,_CRT_PACKING)
    
    #ifndef _POSIX_
    
    #ifdef  __cplusplus
    extern "C" {
    #endif
    
    #ifndef _FSIZE_T_DEFINED
    typedef unsigned long _fsize_t; /* Could be 64 bits for Win32 */
    #define _FSIZE_T_DEFINED
    #endif
    
    #ifndef _FINDDATA_T_DEFINED
    
    struct _finddata32_t {
            unsigned    attrib;
            __time32_t  time_create;    /* -1 for FAT file systems */
            __time32_t  time_access;    /* -1 for FAT file systems */
            __time32_t  time_write;
            _fsize_t    size;
            char        name[260];
    };
    
    struct _finddata32i64_t {
            unsigned    attrib;
            __time32_t  time_create;    /* -1 for FAT file systems */
            __time32_t  time_access;    /* -1 for FAT file systems */
            __time32_t  time_write;
            __int64     size;
            char        name[260];
    };
    
    struct _finddata64i32_t {
            unsigned    attrib;
            __time64_t  time_create;    /* -1 for FAT file systems */
            __time64_t  time_access;    /* -1 for FAT file systems */
            __time64_t  time_write;
            _fsize_t    size;
            char        name[260];
    };
    
    struct __finddata64_t {
            unsigned    attrib;
            __time64_t  time_create;    /* -1 for FAT file systems */
            __time64_t  time_access;    /* -1 for FAT file systems */
            __time64_t  time_write;
            __int64     size;
            char        name[260];
    };
    
    #ifdef _USE_32BIT_TIME_T
    #define _finddata_t     _finddata32_t
    #define _finddatai64_t  _finddata32i64_t
    
    #define _findfirst      _findfirst32
    #define _findnext       _findnext32
    #define _findfirsti64   _findfirst32i64
    #define _findnexti64     _findnext32i64
    
    #else
    #define _finddata_t     _finddata64i32_t
    #define _finddatai64_t  __finddata64_t
    
    #define _findfirst      _findfirst64i32
    #define _findnext       _findnext64i32
    #define _findfirsti64   _findfirst64
    #define _findnexti64    _findnext64
    
    #endif
    
    
    #define _FINDDATA_T_DEFINED
    #endif
    
    #ifndef _WFINDDATA_T_DEFINED
    
    struct _wfinddata32_t {
            unsigned    attrib;
            __time32_t  time_create;    /* -1 for FAT file systems */
            __time32_t  time_access;    /* -1 for FAT file systems */
            __time32_t  time_write;
            _fsize_t    size;
            wchar_t     name[260];
    };
    
    struct _wfinddata32i64_t {
            unsigned    attrib;
            __time32_t  time_create;    /* -1 for FAT file systems */
            __time32_t  time_access;    /* -1 for FAT file systems */
            __time32_t  time_write;
            __int64     size;
            wchar_t     name[260];
    };
    
    struct _wfinddata64i32_t {
            unsigned    attrib;
            __time64_t  time_create;    /* -1 for FAT file systems */
            __time64_t  time_access;    /* -1 for FAT file systems */
            __time64_t  time_write;
            _fsize_t    size;
            wchar_t     name[260];
    };
    
    struct _wfinddata64_t {
            unsigned    attrib;
            __time64_t  time_create;    /* -1 for FAT file systems */
            __time64_t  time_access;    /* -1 for FAT file systems */
            __time64_t  time_write;
            __int64     size;
            wchar_t     name[260];
    };
    
    #ifdef _USE_32BIT_TIME_T
    #define _wfinddata_t    _wfinddata32_t
    #define _wfinddatai64_t _wfinddata32i64_t
    
    #define _wfindfirst     _wfindfirst32
    #define _wfindnext      _wfindnext32
    #define _wfindfirsti64  _wfindfirst32i64
    #define _wfindnexti64   _wfindnext32i64
    
    #else                  
    #define _wfinddata_t    _wfinddata64i32_t
    #define _wfinddatai64_t _wfinddata64_t
    
    #define _wfindfirst     _wfindfirst64i32
    #define _wfindnext      _wfindnext64i32
    #define _wfindfirsti64  _wfindfirst64
    #define _wfindnexti64   _wfindnext64
    
    #endif
    
    #define _WFINDDATA_T_DEFINED
    #endif
    
    /* File attribute constants for _findfirst() */
    
    #define _A_NORMAL       0x00    /* Normal file - No read/write restrictions */
    #define _A_RDONLY       0x01    /* Read only file */
    #define _A_HIDDEN       0x02    /* Hidden file */
    #define _A_SYSTEM       0x04    /* System file */
    #define _A_SUBDIR       0x10    /* Subdirectory */
    #define _A_ARCH         0x20    /* Archive file */
    
    /* function prototypes */
    
    #ifndef _SIZE_T_DEFINED
    #ifdef  _WIN64
    typedef unsigned __int64    size_t;
    #else
    typedef _W64 unsigned int   size_t;
    #endif
    #define _SIZE_T_DEFINED
    #endif
    
    _Check_return_ _CRTIMP int __cdecl _access(_In_z_ const char * _Filename, _In_ int _AccessMode);
    _Check_return_wat_ _CRTIMP errno_t __cdecl _access_s(_In_z_ const char * _Filename, _In_ int _AccessMode);
    _Check_return_ _CRTIMP int __cdecl _chmod(_In_z_ const char * _Filename, _In_ int _Mode);
    /* note that the newly added _chsize_s takes a 64 bit value */
    _Check_return_ _CRTIMP int __cdecl _chsize(_In_ int _FileHandle, _In_ long _Size);
    _Check_return_wat_ _CRTIMP errno_t __cdecl _chsize_s(_In_ int _FileHandle,_In_ __int64 _Size);
    _Check_return_opt_ _CRTIMP int __cdecl _close(_In_ int _FileHandle);
    _Check_return_opt_ _CRTIMP int __cdecl _commit(_In_ int _FileHandle);
    _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) _CRTIMP int __cdecl _creat(_In_z_ const char * _Filename, _In_ int _PermissionMode);
    _Check_return_ _CRTIMP int __cdecl _dup(_In_ int _FileHandle);
    _Check_return_ _CRTIMP int __cdecl _dup2(_In_ int _FileHandleSrc, _In_ int _FileHandleDst);
    _Check_return_ _CRTIMP int __cdecl _eof(_In_ int _FileHandle);
    _Check_return_ _CRTIMP long __cdecl _filelength(_In_ int _FileHandle);
    _Check_return_ _CRTIMP intptr_t __cdecl _findfirst32(_In_z_ const char * _Filename, _Out_ struct _finddata32_t * _FindData);
    _Check_return_ _CRTIMP int __cdecl _findnext32(_In_ intptr_t _FindHandle, _Out_ struct _finddata32_t * _FindData);
    _Check_return_opt_ _CRTIMP int __cdecl _findclose(_In_ intptr_t _FindHandle);
    _Check_return_ _CRTIMP int __cdecl _isatty(_In_ int _FileHandle);
    _CRTIMP int __cdecl _locking(_In_ int _FileHandle, _In_ int _LockMode, _In_ long _NumOfBytes);
    _Check_return_opt_ _CRTIMP long __cdecl _lseek(_In_ int _FileHandle, _In_ long _Offset, _In_ int _Origin);
    _Check_return_wat_ _CRTIMP errno_t __cdecl _mktemp_s(_Inout_z_cap_(_Size) char * _TemplateName, _In_ size_t _Size);
    __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(errno_t, _mktemp_s, _Deref_prepost_z_ char, _TemplateName)
    _Check_return_ __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0(char *, __RETURN_POLICY_DST, _CRTIMP, _mktemp, _Inout_z_, char, _TemplateName)
    _Check_return_ _CRTIMP int __cdecl _pipe(_Inout_cap_c_(2) int * _PtHandles, _In_ unsigned int _PipeSize, _In_ int _TextMode);
    _Check_return_ _CRTIMP int __cdecl _read(_In_ int _FileHandle, _Out_bytecap_(_MaxCharCount) void * _DstBuf, _In_ unsigned int _MaxCharCount);
    
    #ifndef _CRT_DIRECTORY_DEFINED
    #define _CRT_DIRECTORY_DEFINED
    _CRTIMP int __cdecl remove(_In_z_ const char * _Filename);
    _Check_return_ _CRTIMP int __cdecl rename(_In_z_ const char * _OldFilename, _In_z_ const char * _NewFilename);
    _CRTIMP int __cdecl _unlink(_In_z_ const char * _Filename);
    #if !__STDC__
    _CRT_NONSTDC_DEPRECATE(_unlink) _CRTIMP int __cdecl unlink(_In_z_ const char * _Filename);
    #endif
    #endif
    
    _Check_return_ _CRTIMP int __cdecl _setmode(_In_ int _FileHandle, _In_ int _Mode);
    _Check_return_ _CRTIMP long __cdecl _tell(_In_ int _FileHandle);
    _CRT_INSECURE_DEPRECATE(_umask_s) _CRTIMP int __cdecl _umask(_In_ int _Mode);
    _Check_return_wat_ _CRTIMP errno_t __cdecl _umask_s(_In_ int _NewMode, _Out_ int * _OldMode);
    _CRTIMP int __cdecl _write(_In_ int _FileHandle, _In_bytecount_(_MaxCharCount) const void * _Buf, _In_ unsigned int _MaxCharCount);
    
    _Check_return_ _CRTIMP __int64 __cdecl _filelengthi64(_In_ int _FileHandle);
    _Check_return_ _CRTIMP intptr_t __cdecl _findfirst32i64(_In_z_ const char * _Filename, _Out_ struct _finddata32i64_t * _FindData);
    _Check_return_ _CRTIMP intptr_t __cdecl _findfirst64i32(_In_z_ const char * _Filename, _Out_ struct _finddata64i32_t * _FindData);
    _Check_return_ _CRTIMP intptr_t __cdecl _findfirst64(_In_z_ const char * _Filename, _Out_ struct __finddata64_t * _FindData);
    _Check_return_ _CRTIMP int __cdecl _findnext32i64(_In_ intptr_t _FindHandle, _Out_ struct _finddata32i64_t * _FindData);
    _Check_return_ _CRTIMP int __cdecl _findnext64i32(_In_ intptr_t _FindHandle, _Out_ struct _finddata64i32_t * _FindData);
    _Check_return_ _CRTIMP int __cdecl _findnext64(_In_ intptr_t _FindHandle, _Out_ struct __finddata64_t * _FindData);
    _Check_return_opt_ _CRTIMP __int64 __cdecl _lseeki64(_In_ int _FileHandle, _In_ __int64 _Offset, _In_ int _Origin);
    _Check_return_ _CRTIMP __int64 __cdecl _telli64(_In_ int _FileHandle);
    
    _Check_return_wat_ _CRTIMP errno_t __cdecl _sopen_s(_Out_ int * _FileHandle, _In_z_ const char * _Filename,_In_ int _OpenFlag, _In_ int _ShareFlag, _In_ int _PermissionMode);
    
    #if !defined(__cplusplus)
    _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) _CRTIMP int __cdecl _open(_In_z_ const char * _Filename, _In_ int _OpenFlag, ...);
    _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) _CRTIMP int __cdecl _sopen(_In_z_ const char * _Filename, _In_ int _OpenFlag, int _ShareFlag, ...);
    #else
    
    /* these function do not validate pmode; use _sopen_s */
    extern "C++" _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) _CRTIMP int __cdecl _open(_In_z_ const char * _Filename, _In_ int _Openflag, _In_ int _PermissionMode = 0);
    extern "C++" _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) _CRTIMP int __cdecl _sopen(_In_z_ const char * _Filename, _In_ int _Openflag, _In_ int _ShareFlag, _In_ int _PermissionMode = 0);
    
    #endif
    
    #ifndef _WIO_DEFINED
    
    /* wide function prototypes, also declared in wchar.h  */
    
    _Check_return_ _CRTIMP int __cdecl _waccess(_In_z_ const wchar_t * _Filename, _In_ int _AccessMode);
    _Check_return_wat_ _CRTIMP errno_t __cdecl _waccess_s(_In_z_ const wchar_t * _Filename, _In_ int _AccessMode);
    _Check_return_ _CRTIMP int __cdecl _wchmod(_In_z_ const wchar_t * _Filename, _In_ int _Mode);
    _Check_return_ _CRT_INSECURE_DEPRECATE(_wsopen_s) _CRTIMP int __cdecl _wcreat(_In_z_ const wchar_t * _Filename, _In_ int _PermissionMode);
    _Check_return_ _CRTIMP intptr_t __cdecl _wfindfirst32(_In_z_ const wchar_t * _Filename, _Out_ struct _wfinddata32_t * _FindData);
    _Check_return_ _CRTIMP int __cdecl _wfindnext32(_In_ intptr_t _FindHandle, _Out_ struct _wfinddata32_t * _FindData);
    _CRTIMP int __cdecl _wunlink(_In_z_ const wchar_t * _Filename);
    _Check_return_ _CRTIMP int __cdecl _wrename(_In_z_ const wchar_t * _OldFilename, _In_z_ const wchar_t * _NewFilename);
    _CRTIMP errno_t __cdecl _wmktemp_s(_Inout_z_cap_(_SizeInWords) wchar_t * _TemplateName, _In_ size_t _SizeInWords);
    __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(errno_t, _wmktemp_s, _Deref_prepost_z_ wchar_t, _TemplateName)
    __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, _wmktemp, _Inout_z_, wchar_t, _TemplateName)
    
    _Check_return_ _CRTIMP intptr_t __cdecl _wfindfirst32i64(_In_z_ const wchar_t * _Filename, _Out_ struct _wfinddata32i64_t * _FindData);
    _Check_return_ _CRTIMP intptr_t __cdecl _wfindfirst64i32(_In_z_ const wchar_t * _Filename, _Out_ struct _wfinddata64i32_t * _FindData);
    _Check_return_ _CRTIMP intptr_t __cdecl _wfindfirst64(_In_z_ const wchar_t * _Filename, _Out_ struct _wfinddata64_t * _FindData);
    _Check_return_ _CRTIMP int __cdecl _wfindnext32i64(_In_ intptr_t _FindHandle, _Out_ struct _wfinddata32i64_t * _FindData);
    _Check_return_ _CRTIMP int __cdecl _wfindnext64i32(_In_ intptr_t _FindHandle, _Out_ struct _wfinddata64i32_t * _FindData);
    _Check_return_ _CRTIMP int __cdecl _wfindnext64(_In_ intptr_t _FindHandle, _Out_ struct _wfinddata64_t * _FindData);
    
    _Check_return_wat_ _CRTIMP errno_t __cdecl _wsopen_s(_Out_ int * _FileHandle, _In_z_ const wchar_t * _Filename, _In_ int _OpenFlag, _In_ int _ShareFlag, _In_ int _PermissionFlag);
    
    #if !defined(__cplusplus) || !defined(_M_IX86)
    
    _Check_return_ _CRT_INSECURE_DEPRECATE(_wsopen_s) _CRTIMP int __cdecl _wopen(_In_z_ const wchar_t * _Filename, _In_ int _OpenFlag, ...);
    _Check_return_ _CRT_INSECURE_DEPRECATE(_wsopen_s) _CRTIMP int __cdecl _wsopen(_In_z_ const wchar_t * _Filename, _In_ int _OpenFlag, int _ShareFlag, ...);
    
    #else
    
    /* these function do not validate pmode; use _sopen_s */
    extern "C++" _CRT_INSECURE_DEPRECATE(_wsopen_s) _CRTIMP int __cdecl _wopen(_In_z_ const wchar_t * _Filename, _In_ int _OpenFlag, _In_ int _PermissionMode = 0);
    extern "C++" _CRT_INSECURE_DEPRECATE(_wsopen_s) _CRTIMP int __cdecl _wsopen(_In_z_ const wchar_t * _Filename, _In_ int _OpenFlag, _In_ int _ShareFlag, int _PermissionMode = 0);
    
    #endif
    
    #define _WIO_DEFINED
    #endif
    
    int  __cdecl __lock_fhandle(_In_ int _Filehandle);
    void __cdecl _unlock_fhandle(_In_ int _Filehandle);
    
    
    _CRTIMP intptr_t __cdecl _get_osfhandle(_In_ int _FileHandle);
    _CRTIMP int __cdecl _open_osfhandle(_In_ intptr_t _OSFileHandle, _In_ int _Flags);
    
    #if     !__STDC__
    
    /* Non-ANSI names for compatibility */
    
    #pragma warning(push)
    #pragma warning(disable: 4141) /* Using deprecated twice */ 
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_access) _CRTIMP int __cdecl access(_In_z_ const char * _Filename, _In_ int _AccessMode);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_chmod) _CRTIMP int __cdecl chmod(_In_z_ const char * _Filename, int _AccessMode);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_chsize) _CRTIMP int __cdecl chsize(_In_ int _FileHandle, _In_ long _Size);
    _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_close) _CRTIMP int __cdecl close(_In_ int _FileHandle);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_creat) _CRT_INSECURE_DEPRECATE(_sopen_s) _CRTIMP int __cdecl creat(_In_z_ const char * _Filename, _In_ int _PermissionMode);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_dup) _CRTIMP int __cdecl dup(_In_ int _FileHandle);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_dup2) _CRTIMP int __cdecl dup2(_In_ int _FileHandleSrc, _In_ int _FileHandleDst);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_eof) _CRTIMP int __cdecl eof(_In_ int _FileHandle);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_filelength) _CRTIMP long __cdecl filelength(_In_ int _FileHandle);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_isatty) _CRTIMP int __cdecl isatty(_In_ int _FileHandle);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_locking) _CRTIMP int __cdecl locking(_In_ int _FileHandle, _In_ int _LockMode, _In_ long _NumOfBytes);
    _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_lseek) _CRTIMP long __cdecl lseek(_In_ int _FileHandle, _In_ long _Offset, _In_ int _Origin);
    _CRT_NONSTDC_DEPRECATE(_mktemp) _CRT_INSECURE_DEPRECATE(_mktemp_s) _CRTIMP char * __cdecl mktemp(_Inout_z_ char * _TemplateName);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_open) _CRT_INSECURE_DEPRECATE(_sopen_s) _CRTIMP int __cdecl open(_In_z_ const char * _Filename, _In_ int _OpenFlag, ...);
    _CRT_NONSTDC_DEPRECATE(_read) _CRTIMP int __cdecl read(int _FileHandle, _Out_bytecap_(_MaxCharCount) void * _DstBuf, _In_ unsigned int _MaxCharCount);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_setmode) _CRTIMP int __cdecl setmode(_In_ int _FileHandle, _In_ int _Mode);
    _CRT_NONSTDC_DEPRECATE(_sopen) _CRT_INSECURE_DEPRECATE(_sopen_s) _CRTIMP int __cdecl sopen(const char * _Filename, _In_ int _OpenFlag, _In_ int _ShareFlag, ...);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_tell) _CRTIMP long __cdecl tell(_In_ int _FileHandle);
    _CRT_NONSTDC_DEPRECATE(_umask) _CRT_INSECURE_DEPRECATE(_umask_s) _CRTIMP int __cdecl umask(_In_ int _Mode);
    _Check_return_ _CRT_NONSTDC_DEPRECATE(_write) _CRTIMP int __cdecl write(_In_ int _Filehandle, _In_bytecount_(_MaxCharCount) const void * _Buf, _In_ unsigned int _MaxCharCount);
    #pragma warning(pop)
    
    #endif  /* __STDC__ */
    
    #ifdef  __cplusplus
    }
    #endif
    
    #endif  /* _POSIX_ */
    
    #pragma pack(pop)
    
    #endif  /* _INC_IO */

    这个头文件 外围的条件编译是非 posix。windows平台 还有 CreateFile啊,GetFileAttributeEx啊,FindFirstFile

    BOOL FindFirstFileExists(LPCTSTR lpPath, DWORD dwFilter)
    {
      WIN32_FIND_DATA fd;
      HANDLE hFind = FindFirstFile(lpPath, &fd);
      BOOL bFilter = (FALSE == dwFilter) ? TRUE : fd.dwFileAttributes & dwFilter;
      BOOL RetValue = ((hFind != INVALID_HANDLE_VALUE) && bFilter) ? TRUE : FALSE;
      FindClose(hFind);
      return RetValue;
    }

    // 检查一个路径是否存在(绝对路径、相对路径,文件或文件夹均可)
    BOOL FilePathExists(LPCTSTR lpPath)
    {
      return FindFirstFileExists(lpPath, FALSE);
    }

    // 检查一个文件夹是否存在(绝对路径、相对路径均可)
    BOOL FolderExists(LPCTSTR lpPath)
    {
      return FindFirstFileExists(lpPath, FILE_ATTRIBUTE_DIRECTORY);
    }

    HANDLE FindFirstFileEx(
      LPCTSTR lpFileName, // file name
      FINDEX_INFO_LEVELS fInfoLevelId, // information level
      LPVOID lpFindFileData, // information buffer
      FINDEX_SEARCH_OPS fSearchOp, // filtering type
      LPVOID lpSearchFilter, // search criteria
      DWORD dwAdditionalFlags // reserved
    );

     

     

    都是些 windows平台的函数。不是跨平台的。微软 真是 烦人。

     

  • 相关阅读:
    Conversion to Dalvik format failed with error 1 解决方法
    android 简单的反编译
    android ant打包问题总结
    android Sdcard 不同系统映射
    android 好用的开源框架
    android ScrollView 与 ListView 冲突汇总
    android 关于ImageView无法显示过长图片
    android 微信分享api调用总结
    android 捕获线程出错 重启线程
    c++中的容器和string类
  • 原文地址:https://www.cnblogs.com/ayanmw/p/2609721.html
Copyright © 2020-2023  润新知