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操作比较复杂,在这里举一个简单的例子:往文件写入信息
- 首先获取文件句柄,使用CreateFile。
- 调用写入函数,往文件写入
这里我们主要注意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 函数
- 获取首文件句柄,如果它是有效的,说明文件夹里还有其他文件
- 接着获取下一个文件的句柄,并且打印内容
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;
}
运行如下:
本文来自博客园,作者:hugeYlh,转载请注明原文链接:https://www.cnblogs.com/helloylh/p/17209684.html