我用MFC写了一个对话框。
在工程属性里使用Unicode字符集。然后加入一个编辑框空间。在文本编辑框内输入汉字。然后给空间关联了一个CString的变量,然后保存到TXT文件里是乱码。
但是如果在工程属性里使用多字节字符集的话。重复上述步骤,没有乱码出现。。。
求解。。。
为什么使用多字节字符集的话,对话框的按钮都变成Win98那种模式的了?而使用Unicode字符集则有立体感。。
这让我很难抉择啊。。。我是个画面党。。那种按钮确实太难看了。。。
有什么两全的办法吗??
望高人给出解答。。。
谢谢。。。
(注:使用两种字符集都能正常的打开一个TXT文件。。)
打开方式的代码是:
-
CFileDialogfileDlg(TRUE);
-
fileDlg.m_ofn.lpstrTitle=TEXT("打开文件");
-
fileDlg.m_ofn.lpstrFilter=TEXT("文本文件(*.txt)\0*.txt\0\0");
-
if(IDOK==fileDlg.DoModal())
-
{
-
CFilefile(fileDlg.GetPathName(),CFile::modeRead);
-
char*ch=newchar[file.GetLength()+1];
-
ch[file.GetLength()]=0;
-
file.Read(ch,file.GetLength());
-
file.Close();
-
m_Text=ch;
-
}
-
UpdateData(FALSE);
m_Text是控件关联的CString变量,直接使用会出错。。。因为找不出什么原因,我new了一个char数组。然后吧char数组的内容给了m_Text。。。。
写入文件的代码是:
-
UpdateData();
-
CFileDialogfileDlg(FALSE);
-
fileDlg.m_ofn.lpstrTitle=TEXT("保存文件");
-
fileDlg.m_ofn.lpstrFilter=TEXT("文本文件(*.txt)\0*.txt\0\0");
-
fileDlg.m_ofn.lpstrDefExt=TEXT("txt");
-
if(IDOK==fileDlg.DoModal())
-
{
-
CFilefile(fileDlg.GetPathName(),CFile::modeCreate|CFile::modeWrite);
-
file.Write(m_Text,m_Text.GetLength());
-
file.Close();
-
}
写入Unicode文本时,要在文件头部加入Unicode文本标志0XFEFF。
-
#include<stdio.h>
-
-
#ifndef_UNICODE
-
#define_UNICODE//使用UNICODE编码
-
#endif
-
-
#include<Afx.h>//为了使用CString类
-
-
constintUNICODE_TXT_FLG=0xFEFF;
-
-
intmain()
-
{
-
FILE*WriteF;
-
-
-
CStringWstr=_T("一个测试写入文本");
-
WriteF=fopen("d:\\test.txt","w+");
-
-
if(WriteF)
-
{
-
fwrite(&UNICODE_TXT_FLG,2,1,WriteF);
-
fwrite(Wstr.GetBuffer(10),Wstr.GetLength()*2,1,WriteF);
-
fclose(WriteF);
-
}
-
-
return0;
-
}
MFC代码如下:
-
#include<stdio.h>
-
-
#ifndef_UNICODE
-
#define_UNICODE
-
#endif
-
-
#include<Afx.h>
-
-
-
-
constintUNICODE_TXT_FLG=0xFEFF;
-
-
//intmain()
-
//{
-
//FILE*WriteF;
-
//
-
//
-
//CStringWstr=_T("一个测试写入文本");
-
//WriteF=fopen("d:\\test.txt","w+");
-
//
-
//if(WriteF)
-
//{
-
//fwrite(&UNICODE_TXT_FLG,2,1,WriteF);
-
//fwrite(Wstr.GetBuffer(10),Wstr.GetLength()*2,1,WriteF);
-
//fclose(WriteF);
-
//}
-
//
-
//return0;
-
//}
-
-
intmain()
-
{
-
CFileWriteF;
-
CStringWstr=_T("一个测试写入文本");
-
-
WriteF.Open(_T("d:\\test.txt"),CFile::modeCreate|CFile::modeWrite);
-
if(WriteF)
-
{
-
WriteF.Write(&UNICODE_TXT_FLG,2);
-
WriteF.Write(Wstr.GetBuffer(10),Wstr.GetLength()*2);
-
WriteF.Flush();
-
WriteF.Close();
-
}
-
return0;
-
-
}
读的代码如下:
-
m_Text.Empty();
-
CFileReadF(fileDlg.GetPathName(),CFile::modeRead);
-
TCHAR*temp=newTCHAR[ReadF.GetLength()/2+1];
-
ReadF.Read(temp,ReadF.GetLength());
-
temp[ReadF.GetLength()/2]=0;
-
ReadF.Close();
-
m_Text=temp;
-
deletetemp;
这样的话能正常的写入和打开Unicode字符集的TXT文件了。。
可是那些非Unicode的文件就变成乱码了。。。
是不是应该加个判断语句???应该怎么加??
分享到:
相关推荐
用CFile类简单读写文件
MFC-CFile文件操作 相关操作
CFile 读写文件 C++,详细讲解CFile的读写文件方法!!
这是关于MFC下CFile操作的类的相关知识。有打开、读写、关闭、遍历、查询等。很好,很有帮助
供初用EVC读写文件的朋友参考,可能有用
程序功能将添加到列表控件的数据保存在Debug文件夹LIST.CFG文件中,重新运行程序将LIST.CFG文件中的数据在列表控件显示。
MFC按行读文件
VC MFC文件读写操作的范例源码,本示例中涉及到CStdioFile写文件、CFile读写文件 、CFileFind、Shell操作。通过菜单可选择对应操作的执行结果,可比较一下与传统的文件操作有何不同。 lpbi->pszDisplayName=NULL; ...
mfc自定义cfiledialog 预览图片文件
用CFile类读取保存下拉菜单,
主要用于读写uniclde型式的配置文件,注意:配置文件的最后要有一个空行,否则读写不成功。
MFC下文件类_CFile.doc MFC下文件类_CFile.doc MFC下文件类_CFile.doc MFC下文件类_CFile.doc
MFC下的文件类_CFile[参照].pdf
我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。
mfc文件操作类CFile CFile类的几种构造函数 CFile();//不带参数的构造函数。 CFile(int hFile);//带文件句柄参数的构造函数。 CFile( LPCTSTR lpszFileName,//要打开的文件路径 UINT ...
用MFC写的基于单文档的文件读写 用的是 CFileDialog 和 CFile 读取一个文件然后保存 其路径都可以更改
MFC 对话框上 读文件 直接显示出来,可以做参考
Visual C++中,用MFC的CFile::Rename给文件改名
const char *与char * const的区别。C语言对文件读写的支持,FILE指针;文本文件和二进制文件的...MFC对文件读写的支持,CFile类和CFileDialog的使用,文件过滤器的设置。win.ini文件和注册表的读写方式及相关知识点。
课程实验之一,用MFC实现TCP通信,使用SOCKET完成通信,可以发送和接受文件