_mkdir、_access使用指导
文章目录
1. _access判断文件是否存在
1. 头文件
必需的标头:
#include <io.h>
2. 定义
int _access(
const char *path,
int mode
);
3. 参数说明
参数名 | 意义 |
---|---|
path | 文件或目录路径 |
mode | 读取/写入属性 |
4. 返回值
如果该文件具有参数mode指定的模式,则函数将返回 0。
如果命名文件不存在或没有参数mode指定的模式,则函数返回-1;在这种情况下, errno 设置如下表所示:
值 | 换回的常量 | 错误消息 |
---|---|---|
13 | EACCES | 拒绝访问:文件的权限设置不允许指定的访问权限。 |
2 | ENOENT | 未找到文件名或路径。 |
22 | EINVAL | 参数无效。 |
有关这些属性和其他的更多信息返回代码示例,请参见 _doserrno、errno、_sys_errlist 和 _sys_nerr。
5. mode参数
与文件一起使用时, _access 函数确定指定的文件或目录是否存在并具有由 mode值指定的属性。
与目录一起使用时, _access 仅确定指定的目录是否存在;在 Windows 2000 和更高版本的操作系统中,所有目录都具有读取和写入访问权限。
模式 值 | 文件检查内容 |
---|---|
00 | 仅检查是否存在 |
02 | 只写 |
04 | 只读 |
06 | 读取和写入 |
6. 创建多级文件夹
#include<iostream>
#include <io.h>
#include <direct.h>
#include <string>
using namespace std;
void test_access() {
//一个中文占用2字节
string path = "D:/CameraFile/1_哈哈/1.txt";
int len = path.length();
cout << "length: " << len << endl;
char tmpDirPath[256] = { 0 };
for (int i = 0; i < len; i++)
{
tmpDirPath[i] = path[i];
if (tmpDirPath[i] == '\\' || tmpDirPath[i] == '/')
{
//_access()判断文件是否存在,并判断文件是否可写
//int _access(const char *pathname, int mode);
//pathname: 文件路径或目录路径; mode: 访问权限(在不同系统中可能用不能的宏定义重新定义)
//当pathname为文件时,_access函数判断文件是否存在,并判断文件是否可以用mode值指定的模式进行访问。
//当pathname为目录时,_access只判断指定目录是否存在,在Windows NT和Windows 2000中,所有的目录都只有读写权限
//0——>只检查文件是否存在
if (_access(tmpDirPath, 0) == -1)
{
cout << "文件夹" << tmpDirPath << "不存在." << endl;
int ret = _mkdir(tmpDirPath);
if (ret == -1)
cout << "error" << endl;
return;
}
else
{
cout << "文件夹" << tmpDirPath << "存在." << endl;
}
}
}
//0——>检查文件是否只写权限
if (_access(tmpDirPath, 2) == -1)
{
cout << tmpDirPath << "不存在只写权限" << endl;
}
else
{
cout << tmpDirPath << "存在只写权限" << endl;
}
}
int main() {
test_access();
return 0;
}
自己输入路径,文件夹不存在就会创建。
int main() {
//一个中文占用2字节
string name;
cin >> name;
cout << "name: " << name << endl;
int len = name.length();
cout << "length: " << len << endl;
char tmpDirPath[256] = { 0 };
for (int i = 0; i < len; i++)
{
tmpDirPath[i] =name[i];
if (tmpDirPath[i] == '\\' || tmpDirPath[i] == '/')
{
//_access()判断文件是否存在,并判断文件是否可写
//int _access(const char *pathname, int mode);
//pathname: 文件路径或目录路径; mode: 访问权限(在不同系统中可能用不能的宏定义重新定义)
//当pathname为文件时,_access函数判断文件是否存在,并判断文件是否可以用mode值指定的模式进行访问。
//当pathname为目录时,_access只判断指定目录是否存在,在Windows NT和Windows 2000中,所有的目录都只有读写权限
//0——>只检查文件是否存在
if (_access(tmpDirPath, 0) == -1)
{
cout << "文件夹"<<tmpDirPath<< "不存在." << endl;
int ret = _mkdir(tmpDirPath);
if (ret == -1) {
cout << "error" << endl;
return ret;
}
}
else
{
cout << "文件夹" << tmpDirPath << "存在." << endl;
}
}
}
}
若不输入根目录,则创建在当前项目的创建目录中。
若目录中使用反斜杠\,一定要使用双反斜杠\\。因为反斜杠\代表转义字符,会显示其后面的字符。
上面例子中的6目录就没有创建,因为使用的单反斜杠。
学习自:_access、_waccess
2. _mkdir创建不存在的文件夹
1. 头文件
必需的标头:
#include <direct.h>
2. 函数声明
int _mkdir(
const char *dirname
);
int _wmkdir(
const wchar_t *dirname
);
3. 参数
dirname: 新目录的路径。
4. 返回值
如果创建新目录,这些函数都将返回值 0。
出现错误时,函数将返回-1,并按如下所示设置errno 。
值 | 返回的常量 | 系统错误消息 |
---|---|---|
17 | EEXIST | 未创建目录,因为dirname是现有文件、目录或设备的名称。 |
2 | ENOENT | 找不到路径。 |
5. 说明
_Mkdir函数使用指定的 dirname 创建一个新目录 。
_mkdir每次调用只能创建一个新目录,因此只有dirname的最后一个组件可以命名新目录。
_mkdir不会转换路径分隔符。 在 Windows NT 中,反斜杠 () 和正斜杠 (/) 在运行时例程中都是字符串的有效路径分隔符。
_wmkdir是 _mkdir的宽字符版本;
_wmkdir的dirname参数是宽字符字符串。 否则 _wmkdir和 _mkdir的行为相同。
默认情况下,此函数的全局状态的作用域限定为应用程序。
学习自:【_mkdir、_wmkdir】
上一篇: Java反射机制浅析
下一篇: Java 反射常用方法
推荐阅读
-
Access入门教程 17.3 使用SQL语句联接表
-
Access入门教程 2.4 数据库窗口的使用
-
java使用JNA(Java Native Access)调用dll的方法
-
c# 使用Entity Framework操作Access数据库的示例
-
C#使用晚绑定来实现压缩Access数据库的方法
-
c# 使用Entity Framework操作Access数据库的示例
-
Excel Services OverView系列2 使用Excel Web Access技术在线浏览Excel工作薄
-
使用java代码获取新浪微博应用的access token代码实例
-
linux中mkdir创建目录命令使用说明
-
纯真ip数据库转换为(access)使用图文教程