MFC中的文件读写操作(2)(

来源:互联网 发布:ubuntu 14.04安装deb 编辑:程序博客网 时间:2024/05/29 11:02

1.准确定位文件的路径操作文件的过程中,经常需要将文本文件放在程序自身的目录中,但是如果仅仅在程序中使用不指定任何路径信息的相对路径,如: myFile.Open("MyFile.txt",CFile::modeCreate|CFile::typeText|CFile::modeReadWrite); 那么就有可能出现不能正确定位的情况,准确定位文件位置的方法是获得可执行程序自身的绝对路径,如: TCHAR FilePath[MAX_PATH]; GetModuleFileName(NULL,FilePath,MAX_PATH); (_tcstchr(FilePath,'//'))[1]=0; lstrcat(FilePath,_T("MyFile.txt")); CStdioFile myFile; CFileException fileException; if(myFile.Open(FilePath,CFile::modeCreate|CFile::typeText|CFile::modeReadWrite),&fileException) { //文件操作代码 } else { TRACE("Can't open file %s,error=%u/n",FilePath,fileException.m_cause); } myFile.Close(); 2.读文本文件指定的一行,并得到文本文件的总行数。读文本文件指定的一行,并得到文本文件的总行数 要统计文本文件的总行数,可以从头逐行读,直到文件尾,程序: CStdioFile myFile; CFileException fileException; if(myFile.Open("MyFile.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::typeText|CFile::modeReadWrite),&fileException) { CString strContent; int order=1; while(myFile.ReadString(strContent)) { if(2==order) { AfxMessageBox(strContent); } order=order+1; } } else { TRACE("Can't open file"); } myFile.Close(); 实例演示文件操作过程客户操作记录实例本软件分为两个部分,一部分是DLL模块,里面利用Hook技术完成键盘监控和写入文件的功能;另一部分是界面部分,调用DLL启动和停止客户操作记录功能。 第1步:创建MFC DLL项目 第2步:创建TestHook.h文件 第3步:加入全局共享数据变量 第4步:保存DLL实例句柄 第5步:类CKeyboradHook的成员函数 第6步:创建钩子可执行程序 第1步:创建MFC DLL项目创建一个名为HookTest的project,project的类型为选择MFC AppWizard(DLL),DLL类型为MFC Extension DLL(using shared MFC DLL) 注意:选择File->New菜单项,在弹出对话框的左边的列表框中选择MFC AppWizard(DLL). 在project name文本框中输入项目名称,HookTest;location中输入项目的存盘路径;选中Create new workspace;在platForms列表中选择Win32选项。 单击OK按钮继续下一步,在弹出的对话框中设置DLL类型为MFC Extension DLL(using shared MFC DLL). 在IDE中,选择FileView选项卡,在其中就会发现其中有HookTest.cpp文件,却没有HookTest.h文件,这是因为visual C++6.0中没有现成的钩子类,所以要自己动手创建TestHook.h文件,在其中建立钩子类。 第2步:创建TestHook.h文件选择File菜单,再选择New菜单项,将弹出New对话框。选择files选项卡,并且选择其中的C/C++ Header File. 选中add to project,并且在对应的下拉列表中选择项目名称HookTest;在location文本框中输入项目的存盘路径,或单击右边的按钮选择相应的路径;在file对应的文本框中输入文件名HookTest.h;单击OK按钮,在IDE中自动打开Hooktest.h文件供编辑代码用; TestHook.h文件: #if _MSC_VER>1000 #pragma once #endif //_MSC_VER>1000 class AFX_EXT_CLASS CHookTest:public CObject { public: CHookTest(); ~CHookTest(); BOOL StartHook();//StartHook()函数实现安装钩子 BOOL StopHook();//StopHook()函数实现卸载钩子 }; 第3步:加入全局共享数据变量 HookTest.cpp文件中添加: //存储各个键赌赢的字符 CString cskey[TOTAL_KEYS]= { "BACKSPACE", "TAB", …… "F12", }; //存储各个键对应的键值 int nkey[TOTAL_KEYS]= { 0X08, //"BACKSPACE", 0X09, //"TAB", ……. 0x7b,//"F12", }; #pragma data_seg("mydata") //安装的键盘钩子子句柄 HHOOK glhTestHook=NULL; //DLL实例句柄 HINSTANCE glhkInstance=NULL; #pragma data_seg() 第4步:保存DLL实例句柄 DllMain函数中添加如下代码: if (dwReason == DLL_PROCESS_ATTACH) { TRACE0("HOOKTEST.DLL Initializing!/n"); //扩展DLL仅初始化一次 if (!AfxInitExtensionModule(HookTestDLL, hInstance)) return 0; //DLL加入动态MFC类库中 new CDynLinkLibrary(HookTestDLL); //保存DLL实例句柄 glhkInstance=hInstance; } else if (dwReason == DLL_PROCESS_DETACH) { TRACE0("HOOKTEST.DLL Terminating!/n"); //终止这个链接库前调用它 AfxTermExtensionModule(HookTestDLL); } return 1; // ok 第5步:类CKeyboradHook的成员函数 //KeyboradProc函数 LRESULT WINAPI KeyboradProc(int nCode,WPARAM wParam,LPARAM lParam) { for(int i=0;i

原创粉丝点击