上层传入一个 const char* filepath; 参数,我们在使用时应该判断一下该路径的合法性再去使用,避免造成不必要的错误甚至崩溃。
1、判断路径为空
(1)判断指针是否是空
if(filepath) 等价于 if(filepath != nullptr)
(2)判断字符串是否为空
-
filepath[0] != '\0'
:只访问第一个字符,O(1),更快。 -
strlen(filepath)
:要遍历整个字符串直到\0
,O(n)。
对于非常长的字符串(例如读取配置路径、命令行参数),这种微小性能差异可能累积成开销。
2、判断路径是否存在
windows下和linux下引用头文件:
cpp
#include <sys/stat.h>
#ifdef _WIN32
#include <io.h> // for _access if needed
#define stat _stat // MSVC uses _stat
#endif
判断方法:
cpp
struct stat st;
if (stat(filepath, &st) == 0) {
//说明路径是合法的
}
else {
//路径不合法
}
//有必要,可检查一下该路径是否有写权限,防止对文件进行写操作时失败
3、判断文件是否能够以读/写方式打开
引用头文件:
cpp
#include <stdio.h>
代码写法:
cpp
FILE *fp = fopen(path, "r+"); // 读写方式打开(必须存在)
if (fp) {
//可以打开
} else {
//打开失败
}
以上三个步骤判断传入路径合法性大概就够了。