使用Windows API进行目录操作

93 阅读1分钟

使用的API

Windows API功能
CreateDirectory创建文件夹
GetCurrentDirectory获取当前文件夹
SetCurrentDirectory修改当前文件夹
GetModuleFileName获取模块路径

创建文件夹

使用CreateDirectory创建文件夹

代码

void CMFCApplication3Dlg::OnBnClickedButton1()
{
	
	LPTSTR szDirPath = TEXT("c:\\dog");

	// 创建文件夹
	if (!CreateDirectory(szDirPath, NULL)) {
		MessageBox(TEXT("创建目录失败。"));
		return;
	}

	MessageBox(TEXT("创建目录成功。"));
}

效果

可以看到C盘多了一个文件夹

image.png

获取当前目录

使用GetCurrentDirectory获取当前文件夹

代码

void CMFCApplication3Dlg::OnBnClickedButton3()
{
	TCHAR szCurrentDirectory[MAX_PATH];
	DWORD dwCurDirPathLen;
	// 获取当前目录
	dwCurDirPathLen = GetCurrentDirectory(MAX_PATH, szCurrentDirectory);

	if (dwCurDirPathLen == 0) {
		MessageBox(TEXT("获取当前目录失败。"));

		return;
	}
	MessageBox(szCurrentDirectory);
}

效果

image.png

修改当前目录

使用SetCurrentDirectory修改当前目录

代码

void CMFCApplication3Dlg::OnBnClickedButton4()
{
	// 修改当前目录
	if (!SetCurrentDirectory(TEXT("c:\\"))) {
		MessageBox(TEXT("修改当前目录失败。"));
		return;
	}

	TCHAR szCurrentDirectory[MAX_PATH];
	DWORD dwCurDirPathLen;
	// 获取当前目录
	dwCurDirPathLen = GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
	MessageBox(szCurrentDirectory);

}

效果

image.png

获取模块路径

使用GetModuleFileName获取模块路径

获取主模块路径代码

void CMFCApplication3Dlg::OnBnClickedButton5()
{
	TCHAR szModulePath[MAX_PATH];

	// 获取主模块路径, 主模块指的这个exe文件
	if (!GetModuleFileName(NULL, szModulePath, MAX_PATH)) {
		MessageBox(TEXT("获取主模块路径失败。"));
		return;
	}

	MessageBox(szModulePath);
}

效果

image.png

获取调用的dll模块路径代码

void CMFCApplication3Dlg::OnBnClickedButton6()
{
	HMODULE hKernel32;  // 模块句柄

	TCHAR szModulePath[MAX_PATH];

	// 加载dll

	hKernel32 = LoadLibrary(TEXT("kernel32.dll"));

	// 获取dll模块路径, 第一个参数是dll句柄
	if (!GetModuleFileName(hKernel32, szModulePath, MAX_PATH)) {
		MessageBox(TEXT("获取模块路径失败。"));
		return;
	}

	MessageBox(szModulePath);
}

效果

image.png