windows-文件相关操作
函数名称 | 功能 |
---|---|
DeleteFile | 删除指定文件 |
CopyFile | 复制指定文件 |
CreateFile | 创建或者打开I/O设备 |
MoveFile | 移动文件 |
ReadFile | 读取文件 |
WriteFile | 向文件写入内容 |
GetFileSize | 获取文件大小 |
CreateDirectory | 创建目录 |
GetModuleFileName | 获取当前模块全路径 |
FindFirstFile | 查找指定目录下的第一个文件/目录,并获得句柄 |
FindNextFile | 根据句柄循环查找其他文件目录 |
GetFileAttributeEx | 设置文件属性 |
SetFileAttribute | 将文件时间转换为本地文件时间 |
FileTimeToLocalFileTime | 将文件时间转换为本地系统时间 |
删除文件-DeleteFile
BOOL DeleteFile( LPCTSTR lpFileName );
直接加地址就好了
BOOL Delete_File(LPCWSTR a)
{
BOOL ret= DeleteFile(a);
if (ret)
{
return true;
}
else
{
return false;
}
}
复制指定文件-CopyFile
BOOL CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
BOOL bFailIfExists
);
参数
第一个参数表示存在的文件的地址,第二个参数表示要复制到的新文件的地址
第二个参数表示要复制到的文件地址
第三个参数是宏定义,如果是false表示当文件存在时直接覆盖,为true表示当文件存在时返回错误
返回值
成功返回非0,不成功返回0
void Copy_File()
{
BOOL ret =CopyFile(L"C:\\test.txt",L"F:\\test.txt",FALSE);
if (ret)
{
MessageBox(NULL, TEXT("复制文件成功"), TEXT("复制文件"), MB_OK);
}
else
{
MessageBox(NULL, TEXT("复制文件失败"), TEXT("复制文件"), MB_OK);
}
}
CreateFile 创建文件
CreateFile 函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。 文件 pipes 邮槽 通信资源 磁盘驱动器(仅适用于 windowsNT ) 控制台 文件夹(仅用于打开)
HANDLE CreateFileW(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
参数
lpFileName表示文件路径
dwDesiredAccess表示需要的访问权限常见有读写或者又读又写
dwShareMode表示在该进程使用该文件的时候,别的进程的访问权限。
lpSecurityAttributes 安全描述符
dwCreationDisposition 对存在或不存在的文件或设备执行的操作。
dwFlagsAndAttributes 文件或设备属性和标志
hTemplateFile具有GENERIC_READ访问权限的模板文件的有效句柄。模板文件为正在创建的文件提供文件属性和扩展属性。
返回值
成功:返回的是指定的文件或设备的句柄
失败 :返回值为INVALID_HANDLE_VALUE
void Create_File()
{
HANDLE hFile;
hFile = CreateFile(
L"F:\\test.txt", //文件路径
GENERIC_READ | GENERIC_WRITE,//操作办法
FILE_SHARE_READ, //其他进程的访问权限
NULL,//安全描述符
OPEN_ALWAYS, //不存在的时候创建,存在的时候打开
FILE_ATTRIBUTE_NORMAL,
NULL
);
CloseHandle(hFile);
}
MoveFile 移动文件
把文件移动到另一个地方
BOOL MoveFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName
);
参数
第一个参数表示文件存在的路径
第二个参数表示要移动到的路径
返回值
成功返回非0,失败返回0
void Move_File()
{
BOOL ret = MoveFile(L"E:\\test.txt",L"F:\\test.txt");
if (ret)
{
MessageBox(NULL, TEXT("移动文件成功"), TEXT("移动文件"), MB_OK);
}
else
{
MessageBox(NULL, TEXT("移动文件失败"), TEXT("移动文件"), MB_OK);
}
}
WriteFile 向文件写入内容
将数据写入指定的文件或输入/输出(I / O)设备。
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
参数
hFile 文件或I/O设备句柄
lpBuffer 写入数据的缓冲区指针
nNumberOfBytesToWrite 要写入的数据的大小
lpNumberOfBytesWritten 用于返回实际存储数据大小的指针,也就是说获得存入了多少数据的大小的指针返回
lpOverlapped 倘若在指定FILE_FLAG_OVERLAPPED的前提下打开文件,指针不能为空,这个参数就必须引用一个特殊的结构。那个结构定义了一次异步写操作。否则,该参数应置为空(将声明变为ByVal As Long,并传递零值)
void Write_File(HANDLE hFile)
{
/*
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);*/
char buf[1024] = "test";
LPCVOID a = buf;
DWORD sz;
BOOL ret =WriteFile(hFile, buf, sizeof(buf), &sz, NULL);
if (ret)
{
MessageBox(NULL, TEXT("写入文件成功"), TEXT("写入文件"), MB_OK);
}
else
{
MessageBox(NULL, TEXT("写入文件失败"), TEXT("写入文件"), MB_OK);
}
}
ReadFile 读取文件
和WriteFileAPI类似,需要的是在打开获得文件句柄的时候添加上读取文件的句柄,再调用ReadFile函数来读
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
参数
参数和WriteFile函数参数雷同
void Read_File(HANDLE hFile)
{
/*
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);*/
char buf[1024] = { 0 };
DWORD sz;
BOOL ret =ReadFile(hFile, buf, sizeof(buf), &sz, NULL);
if (ret)
{
//MessageBox(NULL,TEXT("读取文件数据成功"),TEXT("读取文件数据"),MB_OK)
printf("读取数据为%s\n", buf);
}
else
{
MessageBox(NULL, TEXT("读取文件失败"), TEXT("读取文件数据"), MB_OK);
}
}
GetFileSize 获取文件大小
获得指定文件大小
DWORD GetFileSize(
HANDLE hFile,
LPDWORD lpFileSizeHigh
);
示例:
void Get_File_Size(HANDLE hFile)
{
/*DWORD GetFileSize(
HANDLE hFile,
LPDWORD lpFileSizeHigh
);*/
DWORD sz;
sz = GetFileSize(hFile, &sz);
printf("文件大小为%d", sz);
}
CreateDirectory 创建目录
BOOL CreateDirectoryA(
LPCSTR lpPathName,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
同样的第一个参数表示目录,第二个表示安全描述符
void Create_Directory()
{
/*BOOL CreateDirectoryA(
LPCSTR lpPathName,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);*/
BOOL ret = CreateDirectory(TEXT("F:\\test"),NULL);
if (ret)
{
MessageBox(NULL, TEXT("创建目录成功"), TEXT("创建目录"), MB_OK);
}
else
{
MessageBox(NULL, TEXT("创建目录失败"), TEXT("创建目录"), MB_OK);
}
}
GetModuleFileName 获取当前模块全路径
DWORD GetModuleFileNameA(
HMODULE hModule,
LPSTR lpFilename,
DWORD nSize
);
参数:
第一个hModule:正在请求其路径的已加载模块的句柄。如果此参数为NULL,则 GetModuleFileName检索当前进程的可执行文件的路径。
lpFilename:指向缓冲区的指针,该缓冲区接收模块的标准路径。如果路径的长度小于nSize参数指定的大小,则函数将成功执行,并且路径将以空终止的字符串形式返回。
例子
void Get_Current_Path()
{
/*
DWORD GetModuleFileNameA(
HMODULE hModule,
LPSTR lpFilename,
DWORD nSize
);*/
char a[1024];
GetModuleFileName(NULL,LPWSTR(a),sizeof(a));
printf("当前路径为%ls\n", a);
}
遍历目录
FindFirstFile 查找指定目录下的第一个文件/目录,并获得句柄
在目录中搜索名称或名称与特定名称(如果使用通配符,则为部分名称)匹配的文件或子目录。
HANDLE FindFirstFileA(
LPCSTR lpFileName,
LPWIN32_FIND_DATAA lpFindFileData
);
参数
第一个参数表示文件夹的目录
目录或路径,以及文件名。文件名可以包含通配符,例如,星号(*)或问号(?)。
第二个参数是一个结构体用来描述文件或者目录的信息,这个结构体类似于进程快照的结构体,是用来存储信息的,所以只需要新建一个然后赋值的时候有对应的赋值
返回值
如果成功则会返回对应的句柄,如果失败就会返回INVALID_HANDLE_VALUE
FindNextFile 根据句柄循环查找其他文件目录
BOOL FindNextFileA(
HANDLE hFindFile,
LPWIN32_FIND_DATAA lpFindFileData
);
和FineFirstFile是差不多的
例子:
void Ergodic_Catalog()
{
setlocale(LC_ALL,"chs");
/*
HANDLE FindFirstFileA(
LPCSTR lpFileName,
LPWIN32_FIND_DATAA lpFindFileData
);
*/
/*
typedef struct _WIN32_FIND_DATAA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
CHAR cFileName[MAX_PATH];
CHAR cAlternateFileName[14];
DWORD dwFileType;
DWORD dwCreatorType;
WORD wFinderFlags;
} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;*/
WIN32_FIND_DATA FindData = { 0 };
HANDLE hFile = FindFirstFile(TEXT("E:\\*"),&FindData);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, TEXT("打开目录失败"), TEXT("打开目录"), MB_OK);
}
else//继续访问下一个
{
do
{
printf("%ls\n", FindData.cFileName);
} while (FindNextFile(hFile, &FindData));
}
}
GetFileAttributeEx 设置文件属性
用来改变文件的属性
BOOL GetFileAttributesExA(
LPCSTR lpFileName,
GET_FILEEX_INFO_LEVELS fInfoLevelId,
LPVOID lpFileInformation
);
第二个参数