判断文件或文件夹(目录)是否存在 C/C++ win/linux通用
一、windows下使用_access()或linux下使用access()函數
windows下使用_access()函數
所在頭文件:<io.h>
函數原型:int _access(const char* _Filename, int _AccessMode);
_Filename:文件或文件夾(目錄)路徑,可為絕對路徑、相對路徑;
_AccessMode:指定判斷的模式,包含4種;
_AccessMode=00 表示只判斷是否存在
_AccessMode=02 表示文件是否可執行
_AccessMode=04 表示文件是否可寫
_AccessMode=06 表示文件是否可讀
函數返回值:如果指定的方式有效,則此函數返回0,否則返回-1。
示例:
#include <io.h>
#include <iostream>
using namespace std;
int main()
{char resPath[260]="./CamIntrinCalibRes.yml";if (_access(resPath, 0) == 0)printf("file exists!\n");if (_access(resPath, 2) == 0)printf("file can be executed!\n");if (_access(resPath, 4) == 0)printf("file can be written!\n");if (_access(resPath, 6) == 0)printf("file can be read!\n");system("pause");return 0;
}
輸出:
若在Windows下使用access()時,
程序報如下錯誤,
錯誤原因:
access()函數是符合POSIX標準的函數,在VS中這個標準已經過時,被ISO C++取代。在ISO C++標準下,該函數的名稱為_access()。
解決方法:
1. 使用錯誤提示的方法,將函數更換為_access();
2. 項目-屬性-C/C+±預處理器中加入“_CRT_NONSTDC_NO_WARNINGS”,保存后重新編譯項目即可
2. 在使用access()所在.cpp第一條語句位置加上 #define _CRT_NONSTDC_NO_WARNINGS,重新編譯即可,原理和2一樣。
linux下使用access()函數
頭文件:<unistd.h>
函數原型:int access(const char *pathname, int mode);
pathname:文件或文件夾(目錄)路徑,可為絕對路徑、相對路徑;
mode:指定判斷的模式,包含4種;
mode=F_OK 只判斷是否存在
mode=X_OK 判斷是否有執行權限
mode=W_OK 只判斷是否有寫權限
mode=R_OK 只判斷是否有讀權限
函數返回值:如果指定的方式有效,則此函數返回0,否則返回-1。
進行windows<->linux平臺移植時需要根據函數變化進行修改。
后續待補充
感謝各位朋友的:點贊、收藏和評論~
參考鏈接:
C語言中access/_access函數的使用
_CRT_NONSTDC…與_CRT_SECURE…
C/C++ 中判斷某一文件或目錄是否存在
總結
以上是生活随笔為你收集整理的判断文件或文件夹(目录)是否存在 C/C++ win/linux通用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs编译报错C1020: 意外的 #en
- 下一篇: C/C++数组初始化的一些误区