谷动谷力

标题: 【C/C++】C/C++语言判断文件是否存在的方法浅析 [打印本页]

作者: sunsili    时间: 2024-4-1 16:04
标题: 【C/C++】C/C++语言判断文件是否存在的方法浅析
【C/C++】C/C++语言判断文件是否存在的方法浅析


1. 方法一:C语言之access

可以使用C语言中unistd.h里的函数access()来判断文件是否存在,其原型如下:
  1. int access(const char *filename, int mode);
复制代码


filename是文件名,mode有下列几种方法:

mode        Description
F_OK        测试文件是否存在
R_OK        测试文件是否有读权限
W_OK        测试文件是否有写权限
X_OK        测试文件是否有执行权限
返回0,表示存在(成功),返回非0表示不存在(错误)。

使用方法
  1. #include <unistd.h>
  2. #include <stdio.h>

  3. int main(void)
  4. {
  5.     if (access("test.txt", F_OK) == 0)
  6.     {
  7.         printf("test.txt exists.\n");
  8.     }
  9.     else
  10.     {
  11.         printf("test.txt not exists.\n");
  12.     }
  13.     return 0;
  14. }
复制代码


2. 方法二:C++方法之ifstream
ifstream中的good方法可以判断一个文件是否存在。
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;

  5. bool isFileExists_ifstream(string& name) {
  6.     ifstream f(name.c_str());
  7.     return f.good();
  8. }
  9. int main()
  10. {
  11.     string filename = "test.txt";

  12.     bool ret = isFileExists_ifstream(filename);
  13.     if (ret)
  14.     {
  15.         cout << "test.txt存在" << endl;
  16.     }
  17.     else
  18.     {
  19.         cout << "test.txt不存在" << endl;
  20.     }
  21. }
复制代码

3. 方法三:fopen方法


可以使用fopen的方式尝试打开一个文件。
  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;

  4. bool isFileExists_fopen(string& name) {
  5.     if (FILE *file = fopen(name.c_str(), "r")) {
  6.         fclose(file);
  7.         return true;
  8.     } else {
  9.         return false;
  10.     }   
  11. }

  12. int main()
  13. {
  14.     string filename = "test.txt";

  15.     bool ret = isFileExists_fopen(filename);
  16.     if (ret)
  17.     {
  18.         cout << "test.tx存在" << endl;
  19.     }
  20.     else
  21.     {
  22.         cout << "test.tx不存在" << endl;
  23.     }
  24. }
复制代码

4. 方法四:sys中的stat函数方法

sys中的stat函数可以查阅文件的状态。
  1. #include <iostream>
  2. #include <sys/stat.h>
  3. using namespace std;

  4. bool isFileExists_stat(string& name) {
  5.   struct stat buffer;   
  6.   return (stat(name.c_str(), &buffer) == 0);
  7. }

  8. int main()
  9. {
  10.     string filename = "test.tx";

  11.     bool ret = isFileExists_stat(filename);
  12.     if (ret)
  13.     {
  14.         cout << "test.tx存在" << endl;
  15.     }
  16.     else
  17.     {
  18.         cout << "test.tx不存在" << endl;
  19.     }
  20. }
复制代码







欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2