首页 > 其他分享 >MFC的CFile类以追加模式写文件

MFC的CFile类以追加模式写文件

时间:2023-11-29 15:36:06浏览次数:50  
标签:CFile 文件 MFC 类以 modeCreate TCHAR file buf

CFile类的Open函数有CFile::modeNoTruncate模式,该模式是非截断的意思,再配合CFile::modeCreate,意味着如果文件不存在,则创建,如果文件存在,则不会将文件内容清空。当对文件进行追加写入时,有一个小细节就是打开文件模式中虽然添加了这两种OpenFlag,但是文件指针并未移动到末尾,因此追加出现异常。正确的做法是在打开成功后,将文件指针移动至末尾,如下所示:

    CFile file;
    if (file.Open(_T("d:\\a.txt"), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary | CFile::modeNoTruncate))
    {
        file.SeekToEnd();
    }

    TCHAR* buf = _T("abcd123456\n");
    file.Write(buf, _tcslen(buf)*sizeof(TCHAR));
    file.Close();

有些时候,文件可能有BOM头,此时就需要特殊处理下,在SeekToEnd后,获取文件指针位置,判断是否是0,是0则写BOM,否则跳过,如下所示:

    CFile file;
    if (file.Open(_T("d:\\a.txt"), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary | CFile::modeNoTruncate))
    {
        file.SeekToEnd();
        if (file.GetPosition() == 0)
        {
            BYTE bom[] = { 0xFF, 0xFE };
            file.Write(bom, _countof(bom));
        }
    }

    TCHAR* buf = _T("abcd123456\n");
    file.Write(buf, _tcslen(buf)*sizeof(TCHAR));
    file.Close();

 

参考MSDN:

  • CFile::modeNoTruncate   Combine this value with modeCreate. If the file being created already exists, it is not truncated to 0 length. Furthermore, if the file being created already exists, the underlying file pointer will point to the beginning of the file. This flag guarantees the file to open, either as a newly created file or as an existing file. This might be useful, for example, when opening a settings file that may or may not exist already. This option applies to CStdioFile as well.

标签:CFile,文件,MFC,类以,modeCreate,TCHAR,file,buf
From: https://www.cnblogs.com/kuaixue/p/17864955.html

相关文章

  • MFC 删除隐藏对话框中的蓝色参考虚线
    ▲对话框中的蓝色参考虚线▲选择"格式"--"切换辅助线"......
  • MFC-ODBC API动态连接配置数据库
    一、ODBC管理器介绍在Window中,ODBC数据远管理器有6个标签:用户DSN、系统DSN、文件DSN、驱动程序、跟踪、连接池,通常情况下,使用用户DSN或者系统DSN,这里主要了解用户DSN和系统DSN即可。用户DSN:ODBC用户数据源存储了如何与指定的数据库提供者连接的信息,只有当前用户可见。系统DSN:O......
  • VC++ 2019 MFC TinyXML2使用教程/方法详解(转载)
    转载地址:VC++2019MFCTinyXML2使用教程/方法详解_vc++2019_一笑的博客-CSDN博客TinyXML2让VC++中操作XML,如鱼得水,就像一个小型的数据库,特别方便。本篇主要介绍在VC++2019的MFC项目中,如何利用TinyXML2,创建、插入、查询、更新、删除节点或数据。也顺便介绍下UNICODE转UTF......
  • 软件分类——博客园标签分类以及“博客网页编辑博客,如何插入Excel中的表格,并且可在网
    .NET技术:后端开发:软件设计:前端开发:企业信息化:移动端开发:软件工程:数据库:操作系统:其他分类:.NET新手区Java架构设计Html/CssBPMAndroid开发敏捷开发SQLServerWindows非技术区ASP.NETPython面向对象JavaScriptSharePointiOS开发项目与团队管理Orac......
  • [MFC]区分USB扫码枪和键盘输入的实现
    不久前在帮客户做一个生产软件,要用到扫码枪输入一定长度的条码并且有条码长度防呆,结果发现手头的扫码枪居然是模拟键盘输入将条码数据直接发送到焦点控件中的(USB口的扫码枪),比如EditControl,而由于业务要求,不允许生产线上员工手工输入条码内容,因此我将文本框设为只读,想不到扫码枪......
  • MFC---常用控件(下)(列表控件、树控件、标签控件)
    列表控件CListCtrl常用属性设置:view->Report(报表方式)常用接口关联控件变量后,测试接口://设置风格样式 //LVS_EX_GRIDLINES网格 //LVS_EX_FULLROWSELECT选中整行 m_list.SetExtendedStyle(m_list.GetExtendedStyle() |LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); //插......
  • Mel频谱与MFCC技术分析
    Mel频谱与MFCC技术分析前言在音频领域,mel频谱和mfcc是非常重要的特征数据,在深度学习领域通常用此特征数据作为网络的输入训练模型,来解决音频领域的各种分类、分离等业务,如端点侦测、节奏识别、和弦识别、音高追踪、乐器分类、音源分离、回声消除等相关业务。当然,针对深度学习音......
  • 基于MFCC特征提取和GMM训练的语音信号识别matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述       语音信号识别是将输入的语音信号映射到对应的文本或语音标签的过程。基于MFCC(Mel-FrequencyCepstralCoefficients)特征提取和GMM(GaussianMixtureModel)训练的方法在语音识别领域取......
  • MFC静态反编译GetMessageMap相关查找方法
    MFC中GetMessageMap包含对多数消息处理的结构,界面菜单,按钮都在这,找到GetMessageMap很关键structAFX_MSGMAP_ENTRY{UINTnMessage;//windowsmessageUINTnCode;//controlcodeorWM_NOTIFYcodeUINTnID;//controlID(or0forwindowsmessage......
  • windows之MFC进度条
    windows之MFC进度条创建UI线程创建线程类在vsstudio2019中按快捷键ctrl+shift+x弹出类向导,在类向导中添加MFC类,选择父类为CWinThread。定义类名称点击确定即可。关联该UI线程对应的对话框BOOLCProgressThread::InitInstance(){CProgressDlgdlgprogress;......