UNICODE环境下读写txt文件操作
******************************************************************************
函 数 名 称: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文件操作的更多相关文章
- Unicode 环境下的字符串的操作
1.CString转int int i _ttoi( str ); 2.保存中文和读取中文: CSdtioFile在Unicode环境下默认是不支持中文的,若需要存储和读取中文需要设置代码页: #in ...
- java开发_读写txt文件操作
package com.mi.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStr ...
- VC 编程ANSI环境下读写Unicode文件
没有注意到文件编码的不同会产生这么多的问题,在动手以前查询了很多资料,在本博客中收藏了不少先辈的成果,在这里一并表示致敬! 关于ANSI和Unicode编码的原理在这里也不说了,主要讲下如 ...
- python操作txt文件中数据教程[1]-使用python读写txt文件
python操作txt文件中数据教程[1]-使用python读写txt文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果 程序实现 filename = '. ...
- Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件
package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- Mysql 8.0 导入txt文件操作(课程实验)
一.实验准备: 1.实验设备:Dell laptop 7559; 2.实验环境:windows 10操作系统; 3.数据库版本:mysql 8.0; 二.实验目的: 1.将一个宠物表pet.txt文件 ...
- apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法
apache环境下禁止某文件夹内运行PHP脚本.禁止访问文件或目录执行权限的设置方法 首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执 ...
- Android 读取手机SD卡根目录下某个txt文件的文件内容
1.先看activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- WPF 读写TxT文件
原文:WPF 读写TxT文件 文/嶽永鹏 WPF 中读取和写入TxT 是经常性的操作,本篇将从详细演示WPF如何读取和写入TxT文件. 首先,TxT文件希望逐行读取,并将每行读取到的数据作为一个数组的 ...
随机推荐
- CROSS JOIN
原文:CROSS JOIN 最近在讲到T-SQL查询的Join部分时,一下子没有想起来CROSS JOIN的用法,因为其实平常也确实基本不用到.特意找了一个例子,以供参考 CROSS JOIN又称为笛 ...
- LockWindowUpdate的函数的用法(不忽略消息,只是暂时不响应,但WM_SETREDRAW根本不接受重绘消息)
Application.ProcessMessages;LockWindowUpdate(Self.Handle); //锁住当前窗口 LockWindowUpdate(0)//解除锁定窗口 Loc ...
- Linux命令行和shell编程
Shell Shell是一个程序,用户输入的命令通过shell来传达给内核或其它程序.用户在linux打开一个终端,终端就会自动调用用户的shell. Linux上的Shell有很多种,用的最多是sh ...
- 搭建RPC over HTTP 环境遇到的问题
最近需要做RPC的IPS协议分析,需要了解一下RPC over HTTP的协议格式,由于此类数据包不易构造,故此想搭建一个抓一些包分析一下. 结果搭建这么个环境硬是用了我四个工作日的时间,崩溃加无语. ...
- [Err] 1146 - Table 'performance_schema.session_status' doesn't exist已解决
刚刚接触MySQL,就往数据库添加数据,就遇到这个问题 解决方案就是找到你安装MySQL的bin目录 然后在cmd输入 mysql_upgrade -u root -p --force 回车,然后输入 ...
- git初学【常用命令、上传项目到码云或从码云拉取、克隆项目】
1.下载git.https://git-scm.com/ 注册码云:https://gitee.com/2.安装git: 默认安装即可: 安装完成之后打开git bash进行最后一步配置 输 ...
- 使用 Gitlab CI/CD 实现自动化发布站点到 IIS
说明 这里先介绍下两个东西 CI/CD.GitLab Runner,当然在此之前你需要对 git 有所了解,关于 git 这里不做说明,可以自行百度. 首先介绍 CI/CD :随着我们开发方式的转变, ...
- 先订一个小目标,把微信小程序搞懂
目标:系统性学习微信小程序. 第一阶段:熟悉微信小程序及前端开发(结合web前端学习) 第二阶段:了解设计及后端 第三阶段:学习后端.
- Storm —— 单机环境搭建
1. 安装环境要求 you need to install Storm's dependencies on Nimbus and the worker machines. These are: Jav ...
- 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream
目录:系统学习 Java IO---- 目录,概览 PipedInputStream 类使得可以作为字节流读取管道的内容. 管道是同一 JVM 内的线程之间的通信通道. 使用两个已连接的管道流时,要为 ...