Windows API函数
1.创建或打开文件
HANDLE hFile = ::CreateFile(_T("E:\\Program\\测试文件夹\\myfile.txt"), //创建或打开的文件
GENERIC_READ| GENERIC_WRITE, //文件存取方式(GENERIC_WRITE)
FILE_SHARE_READ,//共享属性(FILE_SHARE_WRITE/DELETE)
NULL,//安全属性
OPEN_ALWAYS,//文件存在或不存在时采取的操作
FILE_ATTRIBUTE_NORMAL, //新文件属性
NULL);//文件模板的句柄 //文件存在或不存在时采取的操作有:(CREATE_ALWAYS OPEN_ALWAYS (总能成功)// CREATE_NEW OPEN_EXISTING TRUNCATE_EXISTING(可能失败)) //文件属性有:FILE_ATTRIBUTE_(归档,隐藏,只读,系统,临时) //可以加上对文件操作方式:FILE_FLAG_(关闭后立即清除,异步读写文件,不使用缓存直接写硬盘)
if (hFile == INVALID_HANDLE_VALUE) { ::MessageBox(NULL, _T("不能够打开文件!"), _T("错误"), IDYES); }
2.读写文件+移动文件指针
CHAR wbuffer[256] = { 'a','b','c','d','e','f','g','g','h','i','j',' ', ' ',' ' ,' ',' ','0' }; DWORD wByte; ::WriteFile(hFile, wbuffer, 256, &wByte, NULL); ::SetFilePointer(hFile, //文件句柄
0, //移动距离 (移动TXT时候只是在同一行,不会换行)
NULL, //移动距离的高32位
FILE_BEGIN); //移动的模式(FILE_(BEGIN\CURRENT\END)何处开始移动) //返回值是新的文件指针位置或-1(失败)
CHAR rbuffer[256] = {}; DWORD rByte; ::ReadFile(hFile, &rbuffer, 256, &rByte, NULL); ::SetEndOfFile(hFile);//移动文件结束标志EOF至文件指针位置 //SetFilePointer+SetEndOfFile可以用来截断或者扩展文件 //读写都是从文件指针位置开始的
3.锁定+解锁文件(阻止其他程序读写)
::LockFile(hFile, //主要防止其他进程读写
0, //起始位置
0, 1024, //区域大小
0); ::UnlockFile(hFile,0,0,1024,0);
4.常用文件操作
DWORD fileType = ::GetFileType(hFile);//FILE_TYPE_CHAR/DISK/PIPE/UNKNOWN
DWORD fileSizeHigh; //文件长度的高字
DWORD fileSize = ::GetFileSize(hFile, &fileSizeHigh);//文件长度低字
DWORD fileAttrubutes = ::GetFileAttributes(_T("E:\\Program\\测试文件夹\\myfile.txt")); ::CopyFile(_T("E:\\Program\\测试文件夹\\myfile.txt"), //源文件
_T("E:\\Program\\测试文件夹\\Copyfile.txt"), //目标文件
FALSE); //若目标文件存在是否按出错处理
::DeleteFile(_T("E:\\Program\\测试文件夹\\Copyfile.txt"));//只能删除存在且非只读文件
::MoveFile(_T("E:\\Program\\测试文件夹\\myfile.txt"), _T("E:\\Program\\测试文件夹\\测试目录\\myfile.txt"));//(失败)
::MoveFileEx(_T("E:\\Program\\测试文件夹\\测试目录\\myfile.txt"), _T("E:\\Program\\测试文件夹\\myfile.txt"), MOVEFILE_REPLACE_EXISTING);//如果文件已经存在就替换 //MOVEFILE_DELAY_UNTIL_REBOOT 直到重启再移动(若想下次启动就删除文件则第二个参数设置为NULL) //MOVEFILE_WRITE_THROUGH 直到原文件从磁盘删除再返回
::CloseHandle(hFile);//使用完毕就释放句柄
5.MFC对文件的操作(读写+移动指针)
//MFC CFile类
CFile file,file1; file.Open(_T("E:\\Program\\测试文件夹\\CFilemyfile.txt"), CFile::modeReadWrite | CFile::modeCreate|CFile::shareDenyWrite); //默认是独占方式并且存在的文件长度会被截为0 (可以设置共享模式shareDenyNone等)
CFileException e; file1.Open(_T("E:\\Program\\测试文件夹\\myfile.txt"), CFile::modeRead | CFile::modeCreate|CFile::modeNoTruncate,&e); //CFile::modeNoTruncate长度不会被截为0
BYTE buffer1[4096] = { "abcdefghijklmnopqrstuvwxyz" }; file.Write(buffer1, 4096); //写
file.Seek(0, FILE_BEGIN); //移动文件指针
BYTE buffer[4096]; UINT nBytesRead = file.Read(buffer, sizeof(buffer)); //读,返回未读取字节数
file.Close();
