<目的>
在VC的ANSI编译环境下读取Unicode文件长度.
<说明>
在 ANSI 的环境下, 使用 file.GetLength() 读取 Unicode file, 将返回错误的数据. 我们顺手写了小函数, 用于读取 Unicode file length. 我们使用的思路基于, unicode 的每个字符一定是 2bytes. 我们返回的长度值, 包括文件头: 0xff 0xfe 或 0xfe 0xff 的长度. 并对一个文件的例子作了简单的测试.
<例程>
// if file isnot existed or unicode file, then return 0, or the whole filelen including head
int CSetMsg::ReadUnicodeFileLen(CString sFilename)
{
int len = 0;
CFile file;
if(!file.Open(sFilename, CFile::modeRead)) { return 0; }
BYTE head[2];
file.Read(head, 2);
if((head[0]==0xff&&head[1]==0xfe)||(head[0]==0xfe&&head[1]==0xff) ) {
file.Seek(2, CFile::begin); //0xfffe
len = 2;
char tmp[16];
while(file.Read((char *)tmp,2)>0) {
len += 2;
}
}
else {
//AfxMessageBox("File is NOT Unicode!");
}
file.Close();
return len;
}
Allen
2010.09.11
用户1277994 2010-9-14 15:30