windows文件
1.创建或打开文件
HANDLE CreateFile( LPCTSTR lpFileName, //文件名称
DWORD dwDesiredAccess, //访问权限
DWORD dwShareMode, //共享方式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //安全属性,默认为NULL
DWORD dwCreationDisposition, //创建或打开方式
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile); //文件句柄模板,默认为NULL
成功返回文件句柄
2.写数据
BOOL WriteFile( HANDLE hFile, //文件句柄
LPCVOID lpBuffer, //数据buff
DWORD nNumberOfBytesToWrite, //写入的字节数
LPDWORD nNumberOfBytesWritten, //实际写入的字节数
LPOVERLAPPED lpOverlapped ); //默认为NULL
3.读数据
BOOL ReadFile( HANDLE hFile, //文件句柄
LPVOID lpBuffer, //数据buff
DWORD nNumberOfBytesToRead, //要读的字节数
LPDWORD lpNumberOfBytesRead, //实际读到的字节数
LPOVERLAPPED lpOverlapped); //默认为NULL
4.关闭文件
BOOL CloseHandle( HANDLE hObject ); //文件句柄
5.文件长度
DWORD GetFileSize( HANDLE hFile, //文件句柄
LPDWORD lpFileSizeHigh); //返回文件长度的高32位
返回值是文件长度的低32位
6.文件指针
DWORD SetFilePointer( HANDLE hFile, //文件句柄
LONG lDistanceToMove, //偏移量的低32位
PLONG lpDistanceToMoveHigh, //返回实际偏移量的高32位
DWORD dwMoveMethod); //偏移的相对位置
返回实际偏移量的低32位
7.文件相关操作
//拷贝文件
BOOL CopyFile( LPCTSTR lpExistingFileName, //源文件路径(被复制的文件)
LPCTSTR lpNewFileName, //目的地路径
BOOL bFailIfExists); //是否覆盖(TRUE-不覆盖,FALSE-覆盖)
//删除文件
BOOL DeleteFile( LPCTSTR lpFileName);
//移动文件(可跨盘符,如果有相同文件则不行)
BOOL MoveFile( LPCTSTR lpExistingFileName, //源文件路径
LPCTSTR lpNewFileName); //目的地路径
8.文件属性
GetFileAttributes - 获取文件属性
SetFileAttributes - 设置文件属性
GetFileAttributesEx - 获取文件属性、时间等
9.遍历文件
(1)查找文件
HANDLE FindFirstFile( LPCTSTR lpFileName, //查找的路径
LPWIN32_FIND_DATA lpFindFileData); //查找的数据
返回查找句柄
(2)获取下一个文件
BOOL FindNextFile( HANDLE hFindFile, //查找句柄
LPWIN32_FIND_DATA lpFindFileData); //查找的数据
找到返回TRUE
(3)关闭查找
BOOL FindClose( HANDLE hFindFile); //查找句柄
相关代码:
#include "stdafx.h" #include "stdio.h" #include "windows.h" void Create() { //CREATE_NEW - 如果文件存在,不创建 //CREATE_ALWAYS - 如果文件存在,删除它,创建 HANDLE hFile = CreateFile("d:/file.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); CloseHandle(hFile); } void Write() { HANDLE hFile = CreateFile("d:/file.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); char szText[] = "hello txt"; DWORD nCount = 0; WriteFile(hFile, szText, strlen(szText), &nCount, NULL); printf("准备写入的长度: %d,实际写入的长度: %d ", strlen(szText), nCount); CloseHandle(hFile); } void Read() { HANDLE hFile = CreateFile("d:/file.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); DWORD nHigh = 0; DWORD nLow = GetFileSize(hFile, &nHigh); //得到文件的大小 char szText[256] = { 0 }; DWORD nCount = 0; ReadFile(hFile, szText, nLow, &nCount, NULL); printf("准备读取的长度:%d,实际读到的长度:%d,数据:%s ", nLow, nCount, szText); CloseHandle(hFile); } void UseFile() { CopyFile("d:/file.txt", "d:/123/file.txt", TRUE); DeleteFile("d:/file.txt"); MoveFile("d:/123/file.txt", "d:/file.txt"); } void Find() { char szPath[] = "c:/*.*"; WIN32_FIND_DATA wfd = { 0 }; HANDLE hFind = FindFirstFile(szPath, &wfd); BOOL goFind = TRUE; while (goFind) { if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //是目录 { printf("[%s] ", wfd.cFileName); } else { printf("%s ", wfd.cFileName); } goFind = FindNextFile(hFind, &wfd); } FindClose(hFind); } int _tmain(int argc, _TCHAR* argv[]) { Create(); Write(); Read(); UseFile(); Find(); return 0; }