如何在C++中检查文件或目录的存在
检查目录或文件是否存在是文件系统在操作系统中执行的最常见操作之一。大多数编程语言以库函数的形式提供一定级别的文件系统可访问性。在本文中,您将学习如何在C++中测试文件或目录是否存在。
_注意: 程序中将使用sys/stat.h头文件中的stat函数。该函数不是C++标准库的一部分。 _
检查/测试目录的存在
stat 是在 sys/stat.h 头文件中预定义的函数。该函数以路径和结构体作为参数,如果存在与文件/目录关联的元数据,则将存储在结构体中。如果路径有效,则函数返回0。为了演示,我们将测试以下目录的存在:
示例:
// C++程序,用于测试文件/目录的存在
#include <iostream>
#include <sys/stat.h>
using namespace std;
int main()
{
// 目录的路径
const char* dir = "C:/Users/apples";
// 用于存储元数据的结构
struct stat sb;
// 用路径作为参数调用函数
// 如果在此路径上的文件/目录存在,则返回0
if (stat(dir, &sb;) == 0)
cout<<"此路径有效!";
else
cout<<"此路径无效!";
return 0;
}
输出:
此路径有效!
解释: 首先,目录的路径存储在指针变量 dir 中。然后,使用在统计头文件中存在的格式初始化空结构。这将存储元数据。然后,在调用 stat 函数的if条件中。如果路径有效,即文件/目录存在,则输出将是0,否则将是非零值。因此,如果路径有效,则条件为真;否则将执行else块,显示 此路径无效! 信息。
检查/测试文件的存在
前面提到的过程也可以用于识别文件夹中的文件是否存在。通过对先前代码进行一些微小的更改,也可以测试文件的存在。因此,在此示例中,将尝试检测以下文件的存在:
示例:
// C++程序,用于测试文件的存在
#include <iostream>
#include <sys/stat.h>
using namespace std;
int main()
{
// 文件的路径
const char* file = "C:\Temp\4real.png";
// 用于存储元数据的结构
struct stat sb;
// 用路径作为参数调用函数
// 如果在此路径上的文件/目录存在,则返回0
if (stat(file, &sb;) == 0 && !(sb.st_mode & S_IFDIR) )
cout<<"此路径有效!";
else
cout<<"此路径无效!";
return 0;
}
输出:
此路径有效!
说明: 首先将文件路径存储在 file 指针变量中。然后,使用 stat 头文件中存在的格式初始化空结构体,以存储元数据。接着,在进行调用 stat 函数的 if 条件内。如果路径有效,即文件存在,则输出为 0,否则为非零值。然后,使用 S_IFDIR 标志检查路径是否为目录。如果是,则该路径有效,但是属于目录,否则该路径是指向文件的路径。 注意: 确定文件路径的过程适用于 Windows 和 Linux 发行版。