UNICODE环境下读写txt文件操作

内容转载自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;
}

时间: 2024-10-07 16:13:53

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

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

python操作txt文件中数据教程[1]-使用python读写txt文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果 程序实现 filename = './test/test.txt' contents = [] DNA_sequence = [] # 打开文本并将所有内容存入contents中 with open(filename, 'r') as f: for line in f.readlines(): contents.append(line

Unicode环境下的字符差异

我总是对我的字符串使用_T()宏,这是为了让我的代码至少有Unicode的意识,当然,关于Unicode的话题不在这篇文章的讨论范围._T()宏在8位字符环境下是如下定义的: #define _T(x) x // 非Unicode版本(non-Unicode version) 而在Unicode环境下是如下定义的: #define _T(x) L##x // Unicode版本(Unicode version) 所以在Unicode环境下,它的效果就相当于: s.Format(L"%d"

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

一.实验准备: 1.实验设备:Dell laptop 7559; 2.实验环境:windows 10操作系统; 3.数据库版本:mysql 8.0; 二.实验目的: 1.将一个宠物表pet.txt文件导入数据库; 2.掌握使用查看和修改mysql文件操作的全局变量 三.实验步骤: 1.用cmd登录root权限的sql服务器(由于mysql8.0在Windows10上,安全权限问题,普通用户权限无法成功导入文件或进行文件操作.反复查询了各大技术网站也未能成功实现.) 所以命令如下:   以上结果即

Unicode环境下完成CString向string类型的转换

CString是MFC的字符串类,它不是基本类型,而是对字符串的封装,它是自适应的,在UNICODE环境下就是CStringW,在非UNICODE环境下就是CStringA. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

WPF 读写TxT文件

文/嶽永鹏 WPF 中读取和写入TxT 是经常性的操作,本篇将从详细演示WPF如何读取和写入TxT文件. 首先,TxT文件希望逐行读取,并将每行读取到的数据作为一个数组的一个元素,因此需要引入List<string> 数据类型.且看代码: public List<string> OpenTxt(TextBox tbx) { List<string> txt = new List<string>(); OpenFileDialog openFile = new

.NET环境下,通过LINQ操作SQLite数据库

//对应数据库中的某个表 [Table(Name = "main.Student")]    public class Student    {        [Column(Name = "StuName", DbType = "varchar(50)")]        public string StuName { get; set; }        [Column(Name = "StuNo", DbType = &

linux环境下deb格式文件转换成rpm格式

以 alien_8.87.tar.gz 为例: 下载.安装 alien_8.87.tar.gz [[email protected] ~]# wget http://ftp.de.debian.org/debian/pool/main/a/alien/alien_8.87.tar.gz [[email protected] ~]# tar zxvf alien_8.87.tar.gz [[email protected] ~]# cd alien [[email protected] alien

C#读写txt文件的两种方法介绍 v

C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出. byte[] byData = new byte[100]; char[] charData = new char[1000]; public void Read() { try { FileStream file = new FileStream("E:\\test.txt", Fi

javaIO流实现读写txt文件

javaIO流实现文件读写 文件写入: InputStreamReader BufferedReader文件读取:FileOutputStream package javatest.basic22; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStr