Unicode环境下用CFile对文件操作(解决读写乱码)(运行环境vs2015)

这篇博客整理了论坛上的代码,用于在Unicode环境下判断并转换文件的编码。内容包括判断文件是否为Unicode编码,将Unicode文件转为ANSI编码,读取ANSI编码文件,计算文件行数,以及将ANSI文件转回Unicode编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全部都是论坛上找到的代码,自己整理了一下,主要目的是方便以后自己查找使用。


  1. 判断文件是Unicode编码还是ANSI编码
int IsUnicodeFile(PTSTR pstrName)//这个函数是判断函数,()内是文件路径,如果是Unicode则该函数值是1
{
   
   
	try
	{
   
   
		CFile file(pstrName, CFile::modeRead);
		BYTE ch[100];
		memset(ch, 0, 100);
		int ii = file.Read(ch, 100);
		file.Close();
		int i = 0;
		int iU = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE;
		if (IsTextUnicode(ch, 100, &iU))//是否是unicode文件
		{
   
   
			return 1;
		}
		return 0;
	}
	catch (CException* e)
	{
   
   
		return -1;
	}
	return 0;
}

2.如果是Unicode文件则转化成ANSI编码文件

void CViewdataDlg::UnicodeFile2ANSIFile()//函数功能:如果是Unicode文件则把文件转换成ansi格式文件
{
   
   
	if (IsUnicodeFile(_T("")) == 1)//双引号里为文件路径
	{
   
   
		/*********************打开文件*********************************************/
		CFile file;
		CFileException e;
		TCHAR* pszFileName = _T("");//双引号里为文件路径
		if (!file.Open(pszFileName, CFile::modeReadWrite, &e))
		{
   
   
			TRACE(_T("File could not be opened %d\n"), e.m_cause);
		}
		//MessageBox(_T("打开成功"));

		/*********************读取文件*********************************************/
		LONGLONG wfilelen = file.GetLength();
		TCHAR  *wp = new TCHAR[wfilelen + 1];
		memset(wp, 0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值