c语言检测文件是否存在int __cdecl access(const char *, int);
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c语言检测文件是否存在int __cdecl access(const char *, int);,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2210字,纯文字阅读大概需要4分钟。
内容图文
以下是笔者最初的方法,windows api原则上提供的函数应该是最合理高效的,起码这个方法在windows平台上来说有足够的官腔味。
/*Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] Minimum supported server: Windows 2000 Server [desktop apps only] DLL: Shlwapi.dll (version 4.71 or later) */ #include <Windows.h> //Windows API FindFirstFile #include <Shlwapi.h> //Windows API PathFileExists #pragma comment(lib, "shlwapi.lib") int main(void) { if(PathFileExists("setting.ini")){ printf("load customer setting...\n"); }else{ printf("no setting file found,load default..\n"); } return 0; }
群里有朋友提起fopen是posix系统中打开文件fd的标准open,也曾疑虑,如果一个文件几十个G,会不会在fopen的过程中占用很多资源,
后来求证得到的回复:
肯定不会加载啊
正如你说的,如果文件 xxxG 怎么办文件是用指针访问的,所以不用担心你的问题
由于笔者目前研究范围和能力有限,没去研究。
笔者的程序有时候需要兼容linux,通常会在cygwin下面编译并测试,也是再三觉得,过于依赖于特定操作系统的api有点不妥。
在google上搜索了了一下,stackoverflow给出了一个答案:
What‘s the best way to check if a file exists in C? (cross platform)
使用函数
int __cdecl access(const char *, int);
笔者常用的tcc,Visual c++ 6.0,gcc 打开tcc-win32-0.9.26查看相关引用头文件时发现unistd.h只是简单的#include了一次io.h
于是大胆的猜想了一下,Visual c++ 6.0的头文件目录里可能有io.h文件,打开看了一下,果然有,也有相关的函数申明。
根据stackoverflow的方法,笔者写了一段兼容代码,以下代码支持Linux-gcc,TCC(windows),Visual C++6.0,Cygwin-gcc
#include <stdio.h> #if defined(WIN32) || defined(_WIN32) || defined(WIN64)|| defined(_WIN64) #include <io.h> #ifndef F_OK #define F_OK 0 /* Check for file existence */ #endif #endif #if defined(__CYGWIN__)|| defined(__linux__)|| defined(linux) || defined(__linux) #include <unistd.h> #endif int main(void) { if( access( "setting.ini", F_OK ) != -1 ) { printf("load customer setting...\n"); } else { printf("no setting file found,load default..\n"); } }
至此,妈妈再也不用担心我不会确认文件是否存在了 ;)
c语言检测文件是否存在int __cdecl access(const char *, int);
标签:
本文系统来源:http://www.cnblogs.com/passedbylove/p/4627471.html
内容总结
以上是互联网集市为您收集整理的c语言检测文件是否存在int __cdecl access(const char *, int);全部内容,希望文章能够帮你解决c语言检测文件是否存在int __cdecl access(const char *, int);所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。