MFC:CFile类的使用

embedded/2024/12/28 23:57:20/

       为方便对文件操作,MFC提供了CFile类用于文件的读写操作,具体包括文件数据的读取、写入以及文件内部指针的移动等。打开文件时,会有一个指向该文件的指针,同时还生成一个指向具体数据的内部指针,用于记录读取或写入的位置,文件刚打开时,内部指针指向文件开始位置,随着读或写的操作,内部指针会自动移动位置。内部指针移动可通过相关函数进行,移动的单位为字节。
一、使用CFile操作文件的步骤:
(一)、构造CFile类对象
         CFile 参1; //参1 CFile对象名
(二)、调用CFile::Open()函数创建或打开指定文件
          格式:file.open( 
                            LPCTSTR lpszFileName, 
                            UINT nOpenFlags, 
                            CFileException* pError = NULL );
                 参1 文件名(可包含路径,只有文件名,默认为项目目录)
                 参2 文件打开模式,取值包括:
                        CFile::modeCreate //创建新文件,如文件已存在,则将长度变成0
                        CFile::modeNoTruncate  //创建新文件,如果文件已存在,写入内如追加在最后
                        CFile::modeRead //以只读方式打开文件
                        CFile::modeReadWrite //以读写方式打开文件
                        CFile::modeWrite //以只写方式打开文件
                        CFile::typeText //以文本方式打开文件
                        CFile::typeBinary //以二进制方式打开文件
                 参3 pError //打开失败时用来接收失败信息,一般使用其默认值NULL
(三)、调用CFile::Write()函数写入文件
          使用格式:
              CFile::Write( 
                        const void* lpBuf,
                        UINT nCount)
                 参1 准备写入的字符串变量指针
                 参2 写入的字节数
         说明:
         a. Write()是CFile类对象成员函数,需要CFile类对象或指针调用。
         b. 参1 lpBuf是指向写入数据的指针,类型可以是char*或TCHAR*。如要写入的内容在CString对象中,应先将其转为char*或TCHAR*。如希望使用CString对象的成员函数GetLength获取字符串长度来计算参2所用的字节数,应注意在UNICODE字符集下使用TCHAR每个字符的字节数是2(所谓宽字符)。类似的CFile类对象也有一个同名函数GetLength,得到的结果是字节数,宽字符条件下换成字符数要除以2;这两个函数要注意区别。
        c.鉴于参1的类型,写入的内容都是字符串,无论是char*还是TCHAR*。因此,每次写入都是一个字符串;如字符串中包结束符"\0",即使未超过参2的字节数,但结束符后边的内容也不会被写入文件。
        d.如果是写入数组,合理的做法是开循环,一次只写入一个元素的长度,分次写入。如果是自定义类数组,也是开循环,在循环内将自定义类的各个属性再转成字符串后分次写入。
(四)、调用CFile::Read()读取文件
       使用格式:
             CFile::Read(
                   void* lpBuf,
                  UINT nCount ) 
             参1:lpBuf是用于接收读取到的字符串的指针
             参2:nCount是从文件读取的字节数
     说明:
     a.CFIle::Read函数是CFile类的成员函数,需要CFile对象或指针调用。
     b.参2可通过CFile::GetLength()获得(字节数)。
     c.如果文件中的数据是数组,读取方法是把上面介绍的写入方法反过来。具体是提前定义好一个接收数组,然后按数组元素个数开循环,读取后转成需要的类型依次存入数组;如是自定义类数组,在循环中读取各属性后转成需要的类型存入数组。
     d.TCHAR与相关类型转换函数:
        CString类型转成TCHAR[]的函数:wcscpy_s(tchar*,cstring)
        int转成TCHAR字符串函数:wsprintf(tchar*,L"格式字符串",int)
        TCHAR字符串可直接赋值给CString对象:CString a=(TCHAR[]) b
        TCHAR字符串转int:int=_wtoi(TCHAR* pTchar)
(五)、调用CFile::Close()关闭
      使用格式:
          CFile::Close(); //无参
      说明:
      a. CFile::Close()是CFile类的成员函数,需CFile类对象或指针调用。
      b. Close对应的是Open函数,CFile类对象还在,我们仍可以使用Open函数重新打开或打开其它文件。
二、CFile类的其它成员函数
    CFile::Flush();
      功能:刷新待写的数据
      参数:无
    CFile::GetLength();
      功能:获取文件的大小
      参数:无
      返回值:无符号长整型类型的从文件开始至文件尾的字节数
    CFile::Seek(参1,参2);
      功能:定位文件内部指针指向指定位置
      参数:
          参1 偏移量(单位:字节),负值表示向回移动
          参2 起始位置(取值:CFile::begin,CFile::current,CFile::end)
      返回值:返回从文件开始位置至移动后位置的字节数
    CFile::SeekToBegin();
      功能:定位文件内部指针至文件头
      参数:无
      返回值:无
    CFile::SeekToEnd();
      功能:定位文件内部指针至文件尾
      参数:无
      返回值:返回文件长度(字节数),类型为无符号长整形
    CFile::GetFileName();
      功能:获取文件名
      参数:无
      返回值:返回CString类型的文件名字符串
    CFile::GetFilePath();
      功能:获取文件路径及文件名
      参数:无
      返回值:返回CString类型的字符串
    CFile::GetPosition();
      功能:获得当前文件内部指针的读写位置
      参数:无
      返回值:返回无符号长整型(DWORD)类型的内部指针位置
   CFile:: GetStatus();
      功能:取当前文件的状态
      参数:CFileStatus对象
      返回值:成功返回true,失败返回false
      说明:CFileStatus对象的属性包括,m_ctime文件创建的时间、m_mtime文件最后一次修改的时间、m_atime最后一次访问文件并读取的时间、m_size文件逻辑长度(以字节数表示)、m_attribute文件属性字节、m_szFullName[_MAX_PATH]全文件名。
 


http://www.ppmy.cn/embedded/145571.html

相关文章

flex 弹性布局 笔记

<style> /* flex-direction &#xff08;即项目的排列方向&#xff09; flex-wrap &#xff08;换行&#xff09; flex-flow &#xff08; flex-direction属性和flex-wrap属性的简写形式&#xff09; justify-content &#xff08;项目的对齐方向&#xff09;主轴…

MBox20 5G智能网关

在当今全球工业领域被数字化和智能化浪潮深刻影响的时代背景下&#xff0c;5G工业智能网关作为工业互联网架构中的核心设备&#xff0c;正发挥着至关重要的桥梁与纽带作用&#xff0c;为工业企业的转型升级和创新发展注入源源不断的动力。我们自主研发推出了一款集成交换机功能…

Linux系统操作03|chmod、vim

上文&#xff1a; Linux系统操作02|基本命令-CSDN博客 目录 六、chmod&#xff1a;给文件设置权限 1、字母法 2、数字法&#xff08;用的最多&#xff09; 七、vim&#xff1a;代码编写和文本编辑 1、启动和退出 1️⃣启动 2️⃣退出 2、vim基本操作 六、chmod&#x…

150套RAC实施达成!我把共存储存配置刷通过了

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

css 权重

发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 CSS 权重&#xff08;或称为 CSS 优先级&#xff09;决定了当多个 CSS 规则作用于同一元素时&#xff0c;哪一条规则会被应用。…

Java中的Stream

1. 什么是 Stream&#xff1f; Stream 是 Java 8 引入的一种新方式&#xff0c;目的是帮助我们更简洁、更高效地处理集合&#xff08;如 List、Set、Map 等&#xff09;。你可以把 Stream 想象成一条“流水线”&#xff0c;数据就像是流水线上的原材料&#xff0c;经过流水线的…

MQTT协议扩展:解锁物联网通信的无限可能与技术细节

物联网&#xff08;IoT&#xff09;的快速发展推动了设备间通信协议的不断创新与扩展。其中&#xff0c;MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议凭借其轻量级、发布/订阅模式及高可靠性&#xff0c;成为了物联网领域的主流通信协议。然而&#x…

虚拟机中的应用(如 Java 程序或其他应用)无法访问本地 MySQL 数据库,错误提示为 MySQL 服务器拒绝了连接。

目录 问题&#xff1a; 问题原因&#xff1a; 解决方式&#xff1a; 验证远程连接 问题&#xff1a; 虚拟机中的应用&#xff08; Java 程序&#xff09;无法访问本地 MySQL 数据库&#xff0c;错误提示为 MySQL 服务器拒绝了连接。 问题原因&#xff1a; mysql服务器出于安…