ImageVerifierCode 换一换
格式:DOC , 页数:9 ,大小:175.03KB ,
资源ID:10724198      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10724198.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC中文件操作、查找与选择总结.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

MFC中文件操作、查找与选择总结.doc

1、MFC 总结(一):MFC 中文件操作、查找与选择总结(1 )本文主要涉及以下几个方面,均为在 MFC 编程中较为常用的:CFile 操作、CArchive 操作、如何选择文件和文件夹、如何查找文件、获取当前目录、_access 函数等。(一)使用 CFile 类操作文件CFile 类在 MFC 的文件操作中应该是最常用的了。主要的成员函数有Open、Close、Write、Read、Seek、SeekToEnd、GetLength、GetPosition,具体用法见 MSDN。(1)文件打开操作:文件打开有两种方式,一种是先定义类对象,在用 Open 函数打开;一种是在定义类对象时传入文件名

2、和打开方式。分别如下CFile file;if(!file.Open(lpszFileName, nOpenFlags )return;或CFile file(lpszFileName, nOpenFlags);(2)文件打开方式:文件打开方式,即上述 nOpenFlags 的值主要由一些宏定义的值组合而成,具体见MSDN,常用的有如下几种:A. CFile:modeCreate | CFile:modeNoTruncate |CFile:modeWrite ,以写文件的方式打开,如果文件不存在,则新建文件,否则打开已有文件进行写入操作,此时不会清空原有文件;B. 将上述 CFile:mode

3、Write 更换为 CFile:modeRead 或者CFile:modeReadWrite 可实现读操作或者同时读写。(3)判断文件结束判断文件是否结束,没有结束则继续读取,否则关闭退出。这点在编程时常用。对于CFile 常用的判断文件结束的方法是:while(file.GetPosition() 和 operator 运算符 7. friend CArchive 17. return ar; 18. 19. TEST; D. 使用 Read 和 Write 可实现指定数据长度的数据写入/ 读取,这里的数据长度指的是字节数。使用 WriteString 可写入字符串,ReadString 可

4、读出一行字符。注意这里WriteString 并不是写入一行字符串,WriteString 写入的字符串时不会写入0 ,也不会自动写入n。下面是来自 MSDN 的一个例子,相信能说明问题。cpp view plaincopy1. CFile myFile(“myfile“, CFile:modeCreate | CFile:modeReadWrite); 2. CString str1=“String1“, str2=“String2“, str; 3. 4. / Create a storing archive. 5. CArchive arStore( 6. 7. / Write str1

5、 and str2 to the archive 8. arStore.WriteString( str1 ); 9. arStore.WriteString( “n“ ); 10. arStore.WriteString( str2 ); 11. arStore.WriteString( “n“ ); 12. 13. / Close the storing archive 14. arStore.Close(); 15. 16. / Create a loading archive. 17. myFile.SeekToBegin(); 18. CArchive arLoad( 19. 20.

6、 / Verify the two strings are in the archive. 21. arLoad.ReadString( str ); 22. ASSERT( str = str1 ); 23. arLoad.ReadString( str ); 24. ASSERT( str = str2 ); E. IsLoading 和 IsStoring 函数常用来判断是读取还是写入。Close 函数用于切断与 CFile 对象的关联,在这之前会自动调用 Flush 将缓冲区数据写入存储媒质中。F. 在程序中,如果没有调用函数 Flush(),那么真正将数据写入到物理磁盘是在调用函数

7、Close()关闭时。因此,一些重要的数据需要使用 Flush()函数立即写入文件,以防丢失。(2)类对象的读写A. 利用 CArchive 保存/加载一个类对象,则此类必须支持串行化。B. 自定义串行化类的五个步骤:继承 CObject 类;重载 CObject 类的 Serialize 成员函数;在类的.h 文件中,进行串行化的声明:DECLARE_SERIAL(类名);定义一个无参数的构造函数;在类的.cpp 文件中,进行声明:IMPLEMENT_SERIAL(类名, CObject, 版本号)C. 在自定义的类的 Serialize 成员函数下,使用上述( 1)中的方法,保存/加载基本

8、数据类型。如下。在需要文件操作的地方,直接调用该函数即可。cpp view plaincopy1. void CXXXX:Serialize(CArchive 这是一个链表,里面元素为 CObject 类对象的指针,当我们自定义了支持串行化的类后,就可以把数据加入到这个链表中,很方便的实现数据管理和存储。MFC 总结(一):MFC 中文件操作、查找与选择总结(3 )(三)为保存文件选择路径A. 使用 SHBrowseForFolder 函数创建一个对话框,用于选择路径。其原型为LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFO lpbi)其中,返回值是一个指

9、针,一个项目标识符列表,如果用户选择了取消的话,则返回NULL。输入参数 lpbi 为 BROWSEINFO 结构体指针,用于设置对话框的一些属性,其结构分析如下。cpp view plaincopy1. typedef struct _browseinfo 2. HWND hwndOwner; /路径选择对话框的父窗口句柄,可设为 this-m_hWnd 3. LPCITEMIDLIST pidlRoot; /浏览时的初始根目录, 设为 NULL时为桌面目录 4. LPTSTR pszDisplayName; /用于保存用户选中的路径 5. LPCTSTR lpszTitle; /对话框标题

10、 6. UINT ulFlags; /指定对话框的一些特性,为一些值的组合 7. BFFCALLBACK lpfn; /处理事件的回调函数,一般 设为 NULL 8. LPARAM lParam; /应用程序传给回调函数的参数,一般设为 NULL 9. int iImage; /保存被选取的文件夾的图片索引,一般设为 NULL 10. BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO; B. 当选择了一个路径后,使用函数 SHGetPathFromIDList 提取出选择的路径。其原型为BOOL SHGetPathFromIDList(LPCITEMIDLIST

11、pidl,LPTSTR pszPath)其中,输入参数 pidl 为上述 SHBrowseForFolder 的返回值,输出参数 pszPath 为所选择路径。调用成功则返回 TRUE。C. 应用示例。cpp view plaincopy1. /更改文件保存路径 2. void CTestDlg:OnPathselect() 3. 4. /调用两个函数 SHBrowseForFolder,SHGetPathFromIDList 5. LPITEMIDLIST pID; /定义第一个函数的返回值 6. BROWSEINFO lpbi; /定义其输入值 7. char pathMAX_PATH;

12、/保存路径 8. /为 lpbi赋值 9. memset( 10. lpbi.hwndOwner=this-m_hWnd; / 父窗口句柄 11. lpbi.lpszTitle=“请选择保存路径“; / 显示位于对话框左上部的标题 12. lpbi.ulFlags=BIF_EDITBOX ; / 指定对话框的外 观和功能的标志 13. pID=SHBrowseForFolder( /选择路径,获取 ID 14. if(pID!=NULL) 15. /如果成功得到 16. SHGetPathFromIDList(pID,path); /获取路径 17. GetDlgItem(IDC_PATH)-

13、SetWindowText(path); /显示路径 18. 19. (四)选择文件A. 使用 CFileDialog 类,定义一个对象。其构造函数如下。cpp view plaincopy1. CFileDialog( 2. BOOL bOpenFileDialog, /为 TRUE 表示“打开”对话框,为 FALSE 表示“保存”对话框 3. LPCTSTR lpszDefExt = NULL, /指定默认的文件扩展名 4. LPCTSTR lpszFileName = NULL, /指定默认的文件名 5. DWORD dwFlags = OFN_HIDEREADONLY | OFN_OV

14、ERWRITEPROMPT, /指定一些风格 6. LPCTSTR lpszFilter = NULL, /指定可供选择的文件类型和相应的扩展名 7. CWnd* pParentWnd = NULL, /父窗口指针 8. DWORD dwSize = 0 9. ); B. 文件类型和扩展名的书写格式(参数 lpszFilter)文件类型说明和扩展名之间用 | 分割;同种文件类型的扩展名之间用;分割;每种文件类型之间用 | 分割;末尾用 | 指明例如,“Data Files(*.xlc;*xls)|*.xlc;*.xls|All Files(*.*)|*.*|”。其中,蓝色表示文件类型说明,粉色

15、表示扩展名。C. 定义 CFileDialog 类对象后,可使用 DoModal 函数来产生对话框,选择文件。在对话框“确定” 返回后,可使用下列函数获取路径和文件名。主要函数为:GetPathName,GetFileName,GetExtName, GetFileTile 等。D. 应用该类成员变量 m_ofn 可设置初始目录。如 dlg.m_ofn.lpstrInitialDir=_T(“C:“)。E. 应用函数 GetStartPosition 和 GetNextPathName 可实现选择多个文件的情况。F. 一个示例,用于选择单个文件。cpp view plaincopy1. /选择

16、发送的文件 2. void CTestDlg:OnSelectfile() 3. 4. CString str; 5. CFileDialog dlg(TRUE,NULL,NULL,NULL, 6. “DATA Files(*.dat;*.txt)|*.dat;*.txt|All Files(*.*)|*.*|“,this);/定义对象 7. if(dlg.DoModal()=IDOK) 8. 9. str=dlg.GetPathName(); /获取文件名 10. 11. 12. UpdateData(TRUE); 13. m_nFilePath=str; /显示路径 14. UpdateD

17、ata(FALSE); 15. (五)在指定目录下查找文件A. 使用 CFileFind 类可查找指定目录下的文件,涉及的函数有查找函数 FindFile 和FindNextFile,获取文件属性函数和判断文件属性函数,详见 MSDN。B. 对于查找函数,cpp view plaincopy1. BOOL FindFile( 2. LPCTSTR pstrName = NULL, /查找的文件说明 3. DWORD dwUnused = 0 /必须为 0 4. ); 5. virtual BOOL FindNextFile(); /返回非 0 表示还有符合条件的文件,返回 0 表示是最后一个符

18、合条件的文件 需要查找的文件名 pstrName 可设为以下几种:“E:VC+example.txt“ “E:VC+ex*.txt” “E:VC+*.*“C.一个示例。cpp view plaincopy1. CFileFind finder; 2. BOOL bResult = finder.FindFile(_T(“C:te*.dat“); 3. while(bResult) 4. 5. bResult = finder.FindNextFile(); 6. cout(LPCTSTR)finder.GetFileName()endl; 7. (六)获取可执行程序所在的目录A. 对于 API

19、 函数 GetCurrentDirectory 虽然从字面意思上看是获取当前目录,其实获取的并不是.exe 执行文件所在的目录,而是其上一级目录。例如,程序安装在桌面上,我们通过该函数获取的路径是 C:Documents and SettingsAdministrator,而不是 C:Documents and SettingsAdministrator桌面。B. 如需获取程序执行时所在的目录,可使用另外一个 API 函数:GetModuleFileName。采用该函数可获取程序当前执行的文件名(包含完整的路径),然后结合_tsplitpath 函数可分解出路径、文件名、扩展名,再根据需要进行

20、组合。C. 下面是本人在程序中常使用的一个函数:cpp view plaincopy1. /获取当前程序运行目录 2. CString GetCurrentDir() 3. 4. TCHAR szFull_MAX_PATH; /完整路径 5. TCHAR szDrive_MAX_DRIVE; /盘符 6. TCHAR szDir_MAX_DIR; /路径 7. 8. /获取程序当前执行文件名(包含完整路径) 9. GetModuleFileName(NULL, szFull, _MAX_PATH); 10. _tsplitpath(szFull, szDrive, szDir, NULL, N

21、ULL); 11. 12. _tcscpy(szFull, szDrive); /盘符 13. _tcscat(szFull, szDir); /路径 14. 15. return CString(szFull); /返回路径 16. (七)关于 access 函数的应用A. 对于 access 函数知道的人不多,这个函数主要可以用来确定文件或文件夹的访问权限或是否存在。其原型如下:html view plaincopy1. int _access( 2. const char *path, 3. int mode 4. ); B. 参数 path 用于指定文件或文件夹路径, mode 用于指定模式,其有如下四种:mode 值 要判断的模式00 判断是否存在02 判断是否有只写权限04 判断是否有只读权限06 判断是否有读和写权限当 path 指定为文件时,mode 可设置上述四个任意的值;当 path 指定为文件夹时,只能判断其是否存在。C. 使用时,必须包含 io.h 头文件。D. 本人曾经使用该函数来判断某文件夹下的某文件是否存在,以确定作相应的处理。全文完。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报