您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 房地产 > c++读写文本文件及ini文件例子
1.新建一个基于对话框的应用程序,工程名为RWFile。2.2如下图为对话框添加三个按钮,一个编辑框和一个文本控件。3.3为保存按钮添加响应函数OnButton1(),并在响应函数OnButton1()中添加一下代码:voidCRWFileDlg::OnButton1(){UpdateData(true);//更新控件数据到变量char*fileName=c:\\file.txt;//保存信息的文件CFilefile;CFileExceptionfileException;//CFile对象以创建和写的方式打开文件if(!file.Open(fileName,CFile::modeCreate|CFile::modeWrite,&fileException)){//显示异常信息CStringerrorInfo;errorInfo.Format(不能打开文件%s,错误:%u\n,fileName,fileException.m_cause);MessageBox(errorInfo,错误,MB_OK|MB_ICONERROR);return;}file.Write((void*)(&m_word),sizeof(m_word));//将信息写入文件file.Close();//关闭文件//显示成功保存信息MessageBox(已将这句话成功保存到文件中。,信息,MB_OK|MB_ICONINFORMATION);m_word=0;//清空信息UpdateData(false);//更新视图}4.4为读取按钮添加响应函数OnButton2(),并在响应函数OnButton2()中添加一下代码:voidCRWFileDlg::OnButton2(){char*fileName=c:\\file.txt;//保存信息的文件CFilefile;CFileExceptionfileException;//CFile对象以读的方式打开文件if(!file.Open(fileName,CFile::modeRead,&fileException)){//显示异常信息CStringerrorInfo;errorInfo.Format(不能打开文件%s,错误:%u\n,fileName,fileException.m_cause);MessageBox(errorInfo,错误,MB_OK|MB_ICONERROR);return;}file.Read((void*)(&m_word),sizeof(m_word));//将信息写入文件file.Close();//关闭文件UpdateData(false);//更新对话框视图//显示成功读取信息MessageBox(已成功从文件中读取到了这句话。,信息,MB_OK|MB_ICONINFORMATION);}5.5程序运行如下:写入一句话,并进行读取。VisualC++处理的文件通常分为两种:文本文件:只可被任意文本编辑器读取ASCII文本。二进制文件:指对包含任意格式或无格式数据的文件的统称。这里只介绍文本文件的读写,INI文件也属于文本文件的范畴,且INI文件的结构和用途与普通的文本文件不同,所以会单独介绍。第一部分:文本文件文本文件的读写认识CFile类;认识文本文件;能够正确灵活应用文本文件存取信息;避免文本文件读写的常见误区。CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件、内存文件和socket文件。客户操作记录实例功能预览及关键知识点许多系统,出于安全或其他原因,常常要求随时对键盘进行监控,利用Hook(钩子)技术编写的应用程序能够很好地达到这个目的。本软件就制作了一个客户操作记录软件,即在软件运行过程中,用户在键盘上的按键操作会被记录下来,这样对维护软件的正常运行非常有利。只要启动客户操作记录软件后,不管输入焦点是否在本软件上,按键都会被记录下来。我们需要的是键盘的系统监控,只要本软件在运行,无论当前计算机在做什么,都能监测到用户按键的行为并做出反应,这就要用到Hook技术。Hook技术在很多特殊软件中广泛应用,如,金山词霸的“取词”功能,就用到了Hook计技术。钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。钩子的种类很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时在钩子函数中就可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。从钩子的本质来看,可以优先截获操作系统的各种消息进行处理,所以它几乎无所不能,因为windows的应用程序都是基于消息驱动的,应用程序的操作都依赖于它所得到的消息的类型及内容。如果Hook过程在应用程序中实现,若应用程序不是当前窗口时,该Hook就补齐作用;如果Hook在DLL中实现,程序在运行中动态调用它,它能实时对系统进行监控。根据需要,我们采用的是在DLL中实现Hook的方式。(应用程序exe?和DLL的区别所在)文本文件存储管理字符被计算机处理时都是以二进制代码的形式出现的,即一个字符对应一个8位二进制数,这种二进制码的集合就是所谓的ASCII码。基本的ASCII码有128个,最高位都是0,对应的十进制数是0-127。键盘上的字符,如英文字母、数字和一些常用符号,使用基本ASCII部分。如数字“0”的ASCII码用二进制数表示就是00110000(即十进制数48)。扩展的ASCII码有128个,最高位是1,对应的十进制数是128-255。一些制表符和其他符号使用扩展的ASCII码部分。为解决汉字的存储和显示问题,我国制定了国际GB2312。据此规定,一个汉字由2个扩展的ASCII码组成,这种高位为1的双字节汉字编码就是汉字的机内码,简称为内码。例如,汉字“学”的机内码用二进制数表示就是1101000110100111(即十进制数206和167),用十进制表示就是53671(206*256+167)。对于字符,文本文件存储的是它的ASCII码,对于汉字,文本文件存储的是它的内码,即两位ASCII码,如字符串“0学0”,在文本文件中存储的内容是00110000110100011010011100110000正确的文本文件读写过程1.定义文件变量;2.打开指定的文件;3.向从文本文件中写入信息;4.从文本文件中读取信息;5.关闭文件1、定义文件变量定义文件变量格式:CStdioFile文件变量;例如,定义一个名称为f1的文件变量,语句如下:CStdioFilef1;2、打开指定文件可以直接通过CStdioFile的构造函数来打开磁盘文件,同时可以用标志位指定打开方式(只读、只写、读写等):CStdioFile(LPCTSTRlpszFileName,UINTnOpenFlags);其中,lpszFileName表示要打开的文件名,可以是相对路径或绝对路径nOpenFlags设置文件打开方式标志位,可以指定用“|”连接多个标志位。下面是常用的打开标志:CFile::typeText:以文本文件的形式打开文件CFile::typeBinary:以二进制文件的形式打开文件CFile::modeCreate:如果指定文件名的文件不存在,则新建文件;如果文件存在并且没有设置CFile::modeNoTruncate标志,则清空文件。CFile::modeNoTruncate:如果文件存在,不把它的长度删除为0(即不清空文件中的数据)。CFile::modeRead:以只读方式打开文件CFile::modeReadWrite:以可读可写方式打开文件CFile::modeWrite:以只写方式打开文件CFile::shareDenyNone:文件打开后,不禁止其他进程对文件的读写操作CFile::shareExclusive:文件打开后,禁止其他进程对文件的读写操作CFile::shareDenyRead:文件打开后,禁止其他进程对文件的读操作CFile::shareDenyWrite:文件打开后,禁止其他进程对文件的写操作此外,可以不在构造函数中打开文件,而仅仅调用空的构造函数CStidoFile(),然后用CStdioFile::Open()打开文件。Open函数的前两个参数和非空构造函数的参数相同,其声明如下:BOOLOpen(LPCTSTRlpszFileName,UINTnOpenFlags,CFileException*pError=NULL);第3个参数与打开失败时的异常处理有关。实例1:以只读方式打开一个文件步骤:使用AppWizard创建一个对话框应用程序,删除其自动产生的所有控件,添加一个Button控件。双击控件,在相应的函数里添加代码:char*pszFileName=C:\\myfile.txt;CStdioFilemyFile;CFileExceptionfileException;if(!myFile.Open(pszFileName,CFile::modeCreate|CFile::typeText|CFile::modeRead),&fileException){TRACE(Can'topenfile%s,error=%u\n,pszFileName,fileException.m_cause);}运行结果:如果C:\下没有myfile.txt文件,则新生成该文件。3.向从文本文件中写入信息CStdioFile提供了函数WriteString来向文本文件中写入文本,WriteString函数的格式如下:voidWriteString(LPCTSTRlpsz);WriteString的参数lpsz是一个以”\0”字符结束的字符串,要把这个字符串的内容写入文件。提示:使用WriteString函数时,如果希望每执行一次WriteString,文本文件中的内容就会自动换行一次,那么就需要在需要换行的地方输出“\n”:myFile.WriteString(“第1行\n”);实例2:向文件中写入文本建立MFC基于对话框的程序,删除自动添加的所有控件,添加一个“确定”按钮,双击按钮,按默认添加事件函数,双击按钮,在相应的函数处添加如下代码:char*pszFileName=C:\\myfile.txt;CStdioFilemyFile;CFileExceptionfileException;if(myFile.Open(pszFileName,CFile::typeText|CFile::modeCreate|CFile::modeReadWrite),&fileException){myFile.WriteString(第1行\n);CStringstrOrder;strOrder.Format(%d,%.3f,66,88.88);myFile.WriteString(strOrder);}else{TRACE(Can'topenfile%s,error=%u\n,pszFileName,fileException.m_cause);}程序运行结果:C:\myfile.txt文件中内容如下:第1行66,88.8804.从文本文件中读取信息CStidoFile提供了函数ReadString来读取文本,ReadString有两种形式,一种为:virtualLPTSTRReadString(LPTSTRlpsz,UINITnMax);ReadString函数的参数如下:lpsz:是用户提供的一个指向字符串的指针,它用来接受从文件读出的文本,以”\0”结束。nMax是本次所允许读入的文本字符个数,不计“\0”字符,也就是说最多能读入nMax-1个文本字符。ReadString的返回值是一个LPTSTR类型的指针,它指向从文件读出的文本字符串,如果到达文件尾,则返回NULL。ReadString的另一种形式为:BOOLReadString(CString&rString);参
本文标题:c++读写文本文件及ini文件例子
链接地址:https://www.777doc.com/doc-6388626 .html