博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
io.h源码 检查文件是否存在
阅读量:6928 次
发布时间:2019-06-27

本文共 17702 字,大约阅读时间需要 59 分钟。

 请问在windows上使用什么API来检查文件是否存在? 

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

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 
#include
#include
#include
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 
/* * Currently, all MS C compilers for Win32 platforms default to 8 byte * alignment. */#pragma pack(push,_CRT_PACKING)#ifndef _POSIX_#ifdef __cplusplusextern "C" {#endif#ifndef _FSIZE_T_DEFINEDtypedef unsigned long _fsize_t; /* Could be 64 bits for Win32 */#define _FSIZE_T_DEFINED#endif#ifndef _FINDDATA_T_DEFINEDstruct _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_DEFINEDstruct _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 _WIN64typedef unsigned __int64 size_t;#elsetypedef _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#endifint __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平台的函数。不是跨平台的。微软 真是 烦人。

 

转载地址:http://sgzjl.baihongyu.com/

你可能感兴趣的文章
ASP.NET : 如何将服务端的多个文件打包下载
查看>>
Web应用Word编辑
查看>>
同期及上期数据对比处理示例.sql
查看>>
Android之Animations的使用
查看>>
iOS地图位置开发
查看>>
Linux 学习_在虚拟机上面安装RedHat 9(图+文)
查看>>
阻塞与死锁(三)——死锁的定位及解决方法
查看>>
当数据库某张表数据发生变化时,更新c#程序中缓存的用法
查看>>
在Windows的CMD中如何设置支持UTF8编码?
查看>>
jsonp
查看>>
mysql主从复制(一)
查看>>
ASP.NET MVC5+EF6+EasyUI 后台管理系统(60)-系统总结
查看>>
【转载】引擎工具开发的一些总结
查看>>
浮动的清除 -- 四种方法
查看>>
SpringMVC中利用@InitBinder来对页面数据进行解析绑定
查看>>
IDEA中MAVEN项目打JAR包的简单方法
查看>>
乐视云监控数据存放到influxdb中
查看>>
.NET Core容器化@Docker
查看>>
正则表达式
查看>>
如何独立运行 django脚本(需要settings时)_贪婪的小猪_百度空间
查看>>