欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

_mkdir、_access使用指导

程序员文章站 2022-05-13 11:12:31
...

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;
}

_mkdir、_access使用指导

自己输入路径,文件夹不存在就会创建。

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;
			}
		}
	}

}

_mkdir、_access使用指导
若不输入根目录,则创建在当前项目的创建目录中。

若目录中使用反斜杠\,一定要使用双反斜杠\\。因为反斜杠\代表转义字符,会显示其后面的字符。

上面例子中的6目录就没有创建,因为使用的单反斜杠。

_mkdir、_access使用指导

学习自:_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】