c++ 读取html文件,c++ 读写文件操作

本文详细介绍了C++如何进行HTML和INI文件的读写操作,包括CFile和CStdioFile类的使用,以及常见错误处理。通过示例代码展示了如何正确地打开、读取、写入文件,并提供了处理文件不存在、权限错误等问题的解决方案。此外,还讨论了钩子技术和INI文件的读写,提供了相关API函数的用法。
摘要由CSDN通过智能技术生成

向文件写入信息:

1     CFile file;2 file.Open(sMainIniPath, CFile::modeRead);3 BOOL bSuccess=::WritePrivateProfileString("UKEY","value", sUserID, sMainIniPath);4 LOG("写入用户UKEY信息%s", bSuccess?"成功":"失败");5 file.Close();读取文件信息:

1        CString sKeyFileDir=“C:\test.ini”;2 if(CFileFind().FindFile(sKeyFileDir))3 {4 if(::GetPrivateProfileString("UKEY","value","",sUserID.GetBuffer(100),100, sKeyFileDir)>0)5 {6 LOG("读取配置文件%s获取UKEY信息%s成功,删除Test.ini文件", sKeyFileDir, sUserID);7 }8 }9 else10 {11 LOG("没有发现Test.ini文件");12 g_sMsg.Format("没有发现Test.ini文件%s", sKeyFileDir);13 return1;14 }

下面文章转自:http://blog.csdn.net/kevin_ysu/article/details/6334524

第一部分:文本文件

文本文件的读写

认识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的双字节汉字编码就是汉字的机内码,简称为内码。例如,汉字“学”的机内码用二进制数表示就是11010001 10100111(即十进制数206 和167 ),用十进制表示就是53671(206*256+167)。对于字符,文本文件存储的是它的ASCII码,对于汉字,文本文件存储的是它的内码,即两位ASCII码,如字符串“0学0”,在文本文件中存储的内容是00110000 11010001 10100111 00110000

正确的文本文件读写过程

1.定义文件变量;2.打开指定的文件;3.向从文本文件中写入信息;4.从文本文件中读取信息;5.关闭文件

1、定义文件变量

定义文件变量格式:CStdioFile 文件变量;

例如,定义一个名称为f1的文件变量,语句如下:CStdioFile f1;

2、打开指定文件

可以直接通过CStdioFile的构造函数来打开磁盘文件,同时可以用标志位指定打开方式(只读、只写、读写等):

CStdioFile(LPCTSTR lpszFileName,UINT nOpenFlags);

其中,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函数的前两个参数和非空构造函数的参数相同,其声明如下:

BOOL Open(LPCTSTR lpszFileName,UINT nOpenFlags,CFileException* pError=NULL);

第3个参数与打开失败时的异常处理有关。

实例1:以只读方式打开一个文件

步骤:

使用AppWizard创建一个对话框应用程序,删除其自动产生的所有控件,添加一个Button控件。双击控件,在相应的函数里添加代码:

char * pszFileName="C://myfile.txt";

CStdioFile myFile;

CFileException fileException;

if(!myFile.Open(pszFileName,CFile::modeCreate|CFile::typeText|CFile::modeRead),&fileException)

{

TRACE("Can't open file %s, error = %u/n",pszFileName,fileException.m_cause);

}

运行结果:如果C:/下没有myfile.txt文件,则新生成该文件。

3.向从文本文件中写入信息

CStdioFile提供了函数WriteString来向文本文件中写入文本,WriteString函数的格式如下:

void WriteString(LPCTSTR lpsz);

WriteString的参数lpsz是一个以”/0”字符结束的字符串,要把这个字符串的内容写入文件。

提示:使用WriteString函数时,如果希望每执行一次WriteString,文本文件中的内容就会自动换行一次,那么就需要在需要换行的地方输出“/n”:

myFile.WriteString(“第1行/n”);

实例2:向文件中写入文本

建立MFC基于对话框的程序,删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值