Visual_C++面向对象与可视化程序设计_第9章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第9章文件及剪贴板操作Windows操作系统文件操作是Windows应用程序经常要涉及的内容,利用Windows的API函数,能很好地实现文件操作的功能。32位操作系统最大文件长度可达4GB支持长达56字节的文件名同一文件可被不同进程访问HANDLECreateFile(LPCTSTRlpszName,//文件名DWORDdwDesiredAccess,//文件访问形式标识,读操作为GENERIC_READ,写操作为GENERIC_WRITEDWORDdwshareMode,//文件的共享模式标识LPSECURITY_ATTRIBUTESlpsecurityAttributes,DWORDdwCreationDisposition,//文件创建操作标识,DWORDdwFlagsAndAttributes,//文件属性标识HANDLEhTemplateFile//指向文件属性模板的句柄)文件共享模式该文件不能共享,则其值为0可读共享,其值为FILE_SHARE_READ可写共享,其值为FILE_SHARE_WRITE指向安全属性数据结构的指针,常为NULL常用的文件操作函数CreateFile:创建或打开一个文件ReadFile函数:从文件指针的位置开始读取一个现存文件中的数据BOOLReadFile(HANDLELPVOIDhFile,lpBuffer,//打开的文件句柄;//指向接收读入数据缓冲区地址的指针;DWORDLPDWORDnNumberOfBytesToRead,//将从文件中读入的数据字数;lpNumberOfBytesRead,//指向实际读取字节数的指针;LPOVERLAPPEDlpOverlapped//指向一个OVERLAPPED数据结构的指针。)NULL表明从当前位置读取数据WriteFile函数:从文件指针的位置开始向现存文件中的写入数据。BOOLWriteFile(HANDLELPVOIDhFile,lpBuffer,//打开的文件句柄://指向写入数据的缓冲区地址的指针:DWORDLPDWORDnNumberOfBytesToWrite,//将向文件中写入的数据字数:lpNumberOfBytesWitten,//指向实际写入字节数的针:LPOVERLAPPEDlpOverlapped,//指向一个OVERLAPPED数据结构的指针。)NULL表明从当前位置写入数据GetFileInformartiomByHandle函数获取指定文件的信息,并将其保存在BY_HANDLE_FILE_INFORMATION数据结构中BOOLGetFilelnformationByHandle(HANDLEhFile,LPBY_HANDEL_FILE_INFORMATIONlpFilelnformation)为指向BY_HANDLE_FILE_INFORMATION结构的指针SearchPath函数根据给定搜索路径查找指定文件并返回指定文件的路径DWORDSearchPath(LPCTSTRlpPath//指定搜索路径;若为NULL,则采用默认路径;LPCTSTRlpFileName,//搜索的文件名;LPCTSTRlPExtension,//搜索文件的扩展名;DWORDnBufferLength,//用来接收文件路径名的缓冲区长度;LPTSTRlpBuffer,//指向接收文件路径名的缓冲区;LPTSTR*lPFilepart//指向路径名中文件名部分地址的指针。//如果调用该函数未指定搜索路径,//则采用默认系统路径进行搜索)lpFileName默认的搜索次序:(1)当前目录;(2)Windows操作目录;(3)Windows系统所在目录;(4)PATH环境变量包含的目录SetFilePionter函数:设置文件指针的位置DWORDSetFilePoiner(HANDLELONGhFile,lpistanceToMove,//文件句柄//指针移动的字节数LPLONGlpDistanceToMoveHigh,//指向指针移动距离的高位指针dwMoveMethod//指针移动参考位置标识DWORD)文件操作应用举例【例9-1】本例创建一个具有打开文件功能的对话框,并可进行文件的编辑与保存。LRESULTAPIENTRYMainWndProc(......)1.{staticHWNDhWndEdit;2.switch(message)3.{caseWM_CREATE:4.hWndEdit=CreateWindow(EDIT,NULL,WS_CHILD|WS_VISIBLE|WS_HSCROLL|ES_LEFT|ES_MULTILINE|ES_AUTOHSCROLL,0,0,0,0,hWnd,(HMENU)ID_EDITCHILD,(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),NULL);5.break;6.caseWM_SIZE:7.MoveWindow(hWndEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);break;8.caseWM_COMMAND:9.switch(LOWORD(wParam))10.{caseIDM_FILEOPEN:OpenTextFile(hWnd,hWndEdit);break;caseIDM_FILESAVE:SaveTextFile(hWnd,hWndEdit);break;caseIDM_EXIT:SendMessage(hWnd,WM_DESTROY,0L,0L);break;caseIDM_ABOUT:DialogBox(hInst,AboutBox,hWnd,(DLGPROC)About);break;default:return(DefWindowProc(hWnd,message,wParam,lParam));11.12.13.14.15.}16.break;17.caseWM_DESTROY:PostQuitMessage(0);break;18.default:return(DefWindowProc(hWnd,message,wParam,lParam));}return(0);}//*调用公共对话框函数,显示【打开】对话框,检取用户选择的文本文件,然后打开该文本文件到编辑控件中。voidOpenTextFile(HWNDhWnd,HWNDhWndEdit){OPENFILENAMEOpenFileName;charszDirName[MAX_PATH]=;charszFile[MAX_PATH]=\0;charszFileTitle[MAX_PATH]=\0;//OPENFILENAME结构的过滤器规格说明。charszFilter[]={“文本文件(*.txt)\0*.txt\0C源程序文件(*.c)\0*.c\0所有文件\0*.*\0};OpenFileName.lStructSize=sizeof(OPENFILENAME);......OpenFileName.lpstrDefExt=*.txt;OpenFileName.lCustData=0;OpenFileName.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;填写OpenFileName对象属性1.if(GetOpenFileName(&OpenFileName))2.{HANDLEhFile;DWORDdwFileSize,dwBytesRead;char*lpBufPtr;3.hFile=CreateFile(......);//打开指定的文件4.if(hFile!=INVALID_HANDLE_VALUE)5.{dwFileSize=GetFileSize(hFile,NULL);//检取文件字节大小6.if(dwFileSize!=0xFFFFFFFF)7.{lpBufPtr=(char*)malloc(dwFileSize);//分配用来读入文件的缓冲区8.if(lpBufPtr!=NULL)9.{ReadFile(hFile,(LPVOID)lpBufPtr,dwFileSize,&dwBytesRead,NULL);10.if(dwBytesRead!=0){//把文件内容装入多行编辑控件中11.SendMessage(hWndEdit,WM_SETTEXT,0,(LPARAM)lpBufPtr);12.SetWindowText(hWnd,OpenFileName.lpstrFile);}13.else14.MessageBox(hWnd,“读入字节数为零”,NULL,MB_OK|MB_ICONEXCLAMATION);free(lpBufPtr);15.16.}17.else18.MessageBox(NULL,内存分配失败!,NULL,MB_OK|MB_ICONEXCLAMATION);19.}20.else21.MessageBox(NULL,检取文件大小失败,NULL,MB_OK|MB_ICONEXCLAMATION);22.CloseHandle(hFile);23.}24.elseMessageBox(hWnd,打开文件失败,NULL,MB_OK|MB_ICONEXCLAMATION);把文件内容读入缓冲区//*调用公共对话框函数,显示【另存为】对话框,//*用户选择文本名,然后把编辑控件中的内容保存到该文件中voidSaveTextFile(HWNDhWnd,HWNDhWndEdit){OPENFILENAMEOpenFileName;charszDirName[MAX_PATH]=;charszFile[MAX_PATH]=\0;charszFileTitle[MAX_PATH]=\0;charszFilter[]={AllFiles\0*.*\0};OpenFileName.lStructSize=sizeof(OPENFILENAME);OpenFileName.hWndOwner=hWnd;......OpenFileName.lCustData=0;OpenFileName.Flags=OFN_OVERWRITEPROMPT;1.if(GetSaveFileName(&OpenFileName))2.{HANDLEhFile;DWORDdwFileSize,dwBytesWrite;char*lpBufPtr;3.hFile=CreateFile(......);4.if(hFile!=INVALID_HANDLE_VALUE)5.{//检取编辑控件内容的字节大小。6.dwFileSize=SendMessage(hWndEdit,WM_GETTEXTLENGTH,0,0);7.if(dwFileSize!=0)8.{lpBufPtr=(char*)malloc(dwFileSize);//分配文件缓冲区。9.if(dwFileSize!=0)10.{//把编辑控件中的内容装到文件缓冲区。11.SendMessage(hWndEdit,WM_GETTEXT,dwFileSize,(LPARAM)lpBufPtr);12.//把文件缓冲区中的数据存写到文件中。13.WriteFile(hFile,(LPVOID)lpBufPtr,dwFileSize,&dwBytesWrite,NULL);14.SetWindowText(hWnd,OpenFileName.lpstrFile);15.free(lpBufPtr);16.}17.else18.MessageBox(NULL,内存分配失败!,NULL,MB_OK|MB_ICONEXCLAMATION);19.}20.else21.MessageBox(NULL,编辑控件中内容为空,NULL,MB_OK|MB_ICONEXCLAMATION

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功