内容转载自http://blog.sina.com.cn/s/blog_5d2bad130100t0x9.html

UNICODE环境下读写txt文件操作

(2011-07-26 17:40:05)

标签:

杂谈

分类: MFC程序设计
自己动手整理了一下,写了几个函数,用于UNICODE环境下对txt文本文件的操作,针对txt文本的ANSIC编码格式,进行了字符编码格式的转换。
******************************************************************************
函  数  名  称:BOOL FileWriteline(CString &filename,CStringW &msg)
函  数  功  能:向文件filename末尾写入一行指定的内容(CStringW)
函  数  参  数:filename为所要写入的文件,msg为所要写入的内容
返    回    值:函数成功,返回TRUE,失败返回FALSE
*******************************************************************************
BOOL FileWriteline(CString &filename,CStringW &msg)
{
    CStdioFile m_TextFile;
    if(!m_TextFile.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
        return FALSE;
    m_TextFile.SeekToEnd();   
    int ansiCount=WideCharToMultiByte(CP_ACP,0,msg,-1,NULL,0,NULL,NULL);
    char * pTempChar=(char*)malloc(ansiCount*sizeof(char));//申请空间
    memset(pTempChar,0,ansiCount);
    WideCharToMultiByte(CP_ACP,0,msg,-1,pTempChar,ansiCount,NULL,NULL);//转换字符
    m_TextFile.Write(pTempChar,strlen(pTempChar));
    m_TextFile.Write("\n",1);
    free(pTempChar);
    m_TextFile.Close();
    return TRUE;
}

******************************************************************************
函  数  名  称:CStringW FileReadline(CString &filename,int index)
函  数  功  能:从文件filename中读取指定行index的内容
函  数  参  数:filename为所要读取的文件,index为指定行数,从0开始
返    回    值:函数成功,返回读取的一行内容(CStringW),文件打开失败或文件内容
                为空或是指定行数超过文件内容本身的行数,返回内容为空,
*******************************************************************************
CStringW FileReadline(CString &filename,int index)
{
    CStringW  rt;
    int zline=file_nline(filename);
    if(index>zline-1)
    {
        rt=_T("");
        return rt;
    }
    CStdioFile m_TextFile;
    if(!m_TextFile.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeRead))
    {
        rt=_T("");
        return rt;
    }
    int nline=0;
    int i=0;
    char a[1];
    char *b;
    b = new char[500];   
    while(m_TextFile.Read(a,1) && zline!=0)
    {
        if(nline==index && a[0]!='\n')
        {
            b[i]=a[0];
            i++;
        }
        if(a[0]=='\n')
        {
            zline--;
            if(nline==index)
            {
                b[i]='\0';
                break;
            }
            else
                nline++;
        }
    }
    int  unicodeLen = MultiByteToWideChar( CP_ACP,0,b,-1,NULL,0 );
    wchar_t *  pUnicode;
    pUnicode = new  wchar_t[unicodeLen+1];
    memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
    MultiByteToWideChar( CP_ACP,0,b,-1,(LPWSTR)pUnicode,unicodeLen );
    rt = ( wchar_t* )pUnicode;
    m_TextFile.Close();
    delete  pUnicode;
    delete b;
    return rt;
}

******************************************************************************
函  数  名  称:int file_nline(CString &filename)
函  数  功  能:获取文件filename内容的行数
函  数  参  数:filename为所要写入的文件,msg为所要写入的内容
返    回    值:函数成功,返回filename的行数,失败或文件内容为空返回0
*******************************************************************************
int file_nline(CString &filename)
{
    char a[1];
    int nline=0;
    CStdioFile m_TextFile;
    if(!m_TextFile.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeRead))
    {
        return nline;
    }
    while(m_TextFile.Read(a,1)!=0)
    {
        if(a[0]=='\n')
            nline++;
    }
    m_TextFile.Close();
    return nline;
}

******************************************************************************
函  数  名  称:BOOL FileModifyline(CString &filename,int index,CStringW &msg)
函  数  功  能:获取文件filename第index行的内容为msg
函  数  参  数:filename为要修改的文件,index(从0开始)为行数,msg为要修改后的内容
返    回    值:函数成功,返回TRUE,失败返回FALSE
*******************************************************************************
BOOL FileModifyline(CString &filename,int index,CStringW &msg)
{
    int k,nline;
    nline=file_nline(filename);
    if(index>nline-1)
        return FALSE;
    CStringW tempmsg;
    CString tempfile(_T("temp.txt"));
    for(k=0;k<nline;k++)
    {
        tempmsg=FileReadline(filename,k);
        if(tempmsg.IsEmpty())
            return FALSE;
        if(k==index)
        {
            if(FileWriteline(tempfile,msg)==FALSE)
                return FALSE;
        }
        else
        {
            if(FileWriteline(tempfile,tempmsg)==FALSE)
                return FALSE;
        }
    }
    CStdioFile modify;
    modify.Remove(filename);
    modify.Rename(tempfile,filename);
    return TRUE;
}

UNICODE环境下读写txt文件操作的更多相关文章

  1. Unicode 环境下的字符串的操作

    1.CString转int int i _ttoi( str ); 2.保存中文和读取中文: CSdtioFile在Unicode环境下默认是不支持中文的,若需要存储和读取中文需要设置代码页: #in ...

  2. java开发_读写txt文件操作

    package com.mi.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStr ...

  3. VC 编程ANSI环境下读写Unicode文件

    没有注意到文件编码的不同会产生这么多的问题,在动手以前查询了很多资料,在本博客中收藏了不少先辈的成果,在这里一并表示致敬!       关于ANSI和Unicode编码的原理在这里也不说了,主要讲下如 ...

  4. python操作txt文件中数据教程[1]-使用python读写txt文件

    python操作txt文件中数据教程[1]-使用python读写txt文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果 程序实现 filename = '. ...

  5. Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  6. Mysql 8.0 导入txt文件操作(课程实验)

    一.实验准备: 1.实验设备:Dell laptop 7559; 2.实验环境:windows 10操作系统; 3.数据库版本:mysql 8.0; 二.实验目的: 1.将一个宠物表pet.txt文件 ...

  7. apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法

    apache环境下禁止某文件夹内运行PHP脚本.禁止访问文件或目录执行权限的设置方法   首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执 ...

  8. Android 读取手机SD卡根目录下某个txt文件的文件内容

    1.先看activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...

  9. WPF 读写TxT文件

    原文:WPF 读写TxT文件 文/嶽永鹏 WPF 中读取和写入TxT 是经常性的操作,本篇将从详细演示WPF如何读取和写入TxT文件. 首先,TxT文件希望逐行读取,并将每行读取到的数据作为一个数组的 ...

随机推荐

  1. ORA-13541: system moving window baseline size (691200) greater than retention (432000)

    修改awr生成报告时间间隔和保存时间时报错,由默认的每小时生成,保存8天修改为每半个小时生成一次,保存5天: SQL, retention); , retention); END; * ERROR a ...

  2. 全面提价2499元起小米6发布:四曲陶瓷机身+骁龙835+变焦双摄(小米在设计上也多次获得红点最佳、iF金奖等72项工业设计大奖)

    集微网  4月19日报道 今日,小米公司在北京召开正式推出了新一代旗舰手机“小米手机6”.在试玩过真机后,第一感觉就是这款手机做工与颜值相比此前小米手机提升巨大:有四曲面玻璃或陶瓷机身.不锈钢高亮边框 ...

  3. 漫步Facebook开源C++库Folly之string类设计(散列、字符串、向量、内存分配、位处理等,小部分是对现有标准库和Boost库功能上的补充,大部分都是基于性能的需求而“重新制造轮子”)

    就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能的需求. 这里是folly的github地址:https:// ...

  4. 推荐一个第三方Qt库的集合 good

    https://inqlude.org/ Stable libraries | Development versions | Unreleased | Commercial | All attica ...

  5. 《Windows via C/C++》学习笔记 —— 设备I/O之“同步的设备I/O”(系列文章)

    前面曾经讲过,设备I/O的方式有两种:同步和异步.本篇介绍一下同步设备I/O.主要涉及到两个函数:ReadFile和WriteFile. 不要被这两个函数的名称迷惑,不仅可以将这两个作用于文件,也可以 ...

  6. FrieMonkey获取手机的IMSI等信息

    procedure THeaderFooterForm.FormCreate(Sender: TObject); var TelephonyManager: JTelephonyManager; Te ...

  7. qt中用tcp传输xml消息 good

    本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.   环境: 主机:WIN7 开发环境:Qt5 3.1.2 说明: 在tcp上传输xml消息. 协议格式如 ...

  8. HTML连载11-HTML中被废弃的标签&字符实体

    ​一.为什么会有被废弃的标签 答:HTML中以前存在一部分不是用来添加语义的标签,而与我们HTML标签是用来添加语义的,这与我们的定义不相符. 例如: 1.标签<br>:换行 2.标签&l ...

  9. Scala 学习之路(四)—— 数组Array

    一.定长数组 在Scala中,如果你需要一个长度不变的数组,可以使用Array.但需要注意以下两点: 在Scala中使用(index)而不是[index]来访问数组中的元素,因为访问元素,对于Scal ...

  10. Java NIO: Non-blocking Server 非阻塞网络服务器

    本文翻译自 Jakob Jenkov 的 Java NIO: Non-blocking Server ,原文地址:http://tutorials.jenkov.com/java-nio/non-bl ...