windows文件操作总结

windows文件操作

函数名称功能
DeleteFile删除指定文件
CopyFile复制文件
CreateFile新建或打开一个文件,并返回句柄
MoveFile移动文件
ReadFile读取文件
WriteFile向文件写入内容
GetFileSize获取文件大小
CreateDirectory创建目录
GetModuleFileName获取当前模块全路径
FindFirstFile查找指定目录下的第一个文件/目录,并获得句柄
FindNextFile根据句柄循环查找其他文件目录
GetFileAttributeEx获取文件或目录的属性
SetFileAttribute设置文件属性
FileTimeToLocalFileTime将文件时间转换为本地文件时间
FileTimeToSystemTime将文件时间转换为本地系统时间。

基本文件操作:

DeleteFile 删除文件
CopyFile 复制文件
MoveFile 移动文件
ReadFile 从文件读取
WriteFile 向文件写入
GetFileSize 获取文件大小

int main()
{
	//1. 删除文件
	DeleteFileW(L"F:/1.txt");
	//2. 复制一个文件
	CopyFile(L"F:/123.txt", L"F:/新建/dst.txt",FALSE);
	//3. 移动文件(剪切)
	MoveFile(L"F:/123.txt", L"F:/新建/剪切.txt");	
	return 0;
}

CreateFile操作

CreateFile操作比较复杂,在这里举一个简单的例子:往文件写入信息

  1. 首先获取文件句柄,使用CreateFile。
  2. 调用写入函数,往文件写入

这里我们主要注意CreateFile的函数参数:

HANDLE CreateFileA(
 	LPCSTR                lpFileName, 
	DWORD                 dwDesiredAccess,
	DWORD                 dwShareMode,
	LPSECURITY_ATTRIBUTES lpSecurityAttributes,
	DWORD                 dwCreationDisposition,
	DWORD                 dwFlagsAndAttributes,
	HANDLE                hTemplateFile
);

函数如下:

BOOL myWriteFileFunc()
{
	//4. 创建或打开文件
	HANDLE hFile = CreateFile(
		L"F:/新建/123.txt", 
		GENERIC_WRITE, 
		FILE_SHARE_READ, 
		NULL,
		OPEN_ALWAYS, 
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	DWORD size; 
	//5. 往文件写入内容
	/*WriteFile(hFile, L"Hello World", sizeof(L"Hello World"), &size, NULL);*/
	WCHAR str[] = L"Hello World";
	DWORD CurSize = 0;
	WriteFile(hFile,
		str,
		sizeof(str),
		&CurSize,
		NULL);
	CloseHandle(hFile);
	return TRUE;
}

注意CreateFIle的参数即可,按F1可以查看具体

文件其他操作

遍历一个文件夹下的所有文件,并且显示他们的相关信息:
就像遍历进程和模块一样,我们有一个FindFiirstFile 和 FindNextFile 函数

  1. 获取首文件句柄,如果它是有效的,说明文件夹里还有其他文件
  2. 接着获取下一个文件的句柄,并且打印内容
int main()
{
	setlocale(LC_ALL, "chs");
	WIN32_FIND_DATA win32_find_data{ 0 };
	HANDLE FileHandle =  FindFirstFileW(L"F:/新建/*", &win32_find_data);
	if (FileHandle != INVALID_HANDLE_VALUE)
	{
		do
		{
			printf("文件名:%ls ", win32_find_data.cFileName);
			if (win32_find_data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
			{
				printf("是否隐藏(是)\n");
			}
			else
			{
				printf("是否隐藏(否)\n");
			}
		} while (FindNextFileW(FileHandle, &win32_find_data));
	}
	FindClose(FileHandle);
	return 0;
}

注意:

  • setlocale 函数:设置中文状态,可以输出中文。
  • WIN32_FIND_DATA: 一个存储文件信息的结构体,里面包含了文件所包含的一些信息,可以自行查看文档。
  • FindClose函数: 专门关闭由文件夹打开的句柄。 (使用CloseHandle会报错)

在这里插入图片描述


文件时间转换

int main()
{
	WIN32_FIND_DATAW FindData{ 0 };
	HANDLE findHandle = FindFirstFileW(L"F:/新建/*", &FindData);
	FILETIME ReturnFileTime{ 0 };
	SYSTEMTIME systemTime{ 0 };
	//文件时间转换为本地文件时间
	FileTimeToLocalFileTime(&FindData.ftCreationTime, &ReturnFileTime);
	//本地文件时间转换为系统文件时间
	FileTimeToSystemTime(&ReturnFileTime, &systemTime);
	printf("时间: %d %d %d -- %d %d %d\n", systemTime.wYear, systemTime.wMonth, 				systemTime.wDay,
		systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
	return 0;
}

运行如下:
在这里插入图片描述

posted @ 2022-10-18 23:50  hugeYlh  阅读(46)  评论(0编辑  收藏  举报  来源