一、C语言关于读取unicode文件的注意事项
关于unicode的基本知识,请参考其他知识。
c语言中的FILE读写unicode的文件的时候,一定要记住,必须以二进制的方式读取,如果以文本的方式,会有意想不到的错误。
举例:
字符“a我b”的unicode编码是6100 1161 6200.如果以文本的方式读取_fgetts得到的结果就是6100 0000 1100 6100 6200 0000.也就是他在每个byte后面
加上一个00。其他方式也是一样。
二、循环遍历文件夹下的文件函数
void RecurseFile(CString path)
{
WIN32_FIND_DATA fileInfo;
HANDLE Hfile;
BOOL bRes = TRUE;
Hfile = FindFirstFile(path, &fileInfo);
if (Hfile == INVALID_HANDLE_VALUE)
return ;
while (Hfile != INVALID_HANDLE_VALUE && bRes)
{
CString strFilename = fileInfo.cFileName;
CString strSuff = strFilename.Right(2);
if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (strSuff.CompareNoCase(_T(".")) && strSuff.CompareNoCase(_T("..")))
{
CString str = path.Left(path.GetLength() - 3);
path = str + strFilename + _T("\\*.*");
RecurseFile(path);
path = str + _T("*.*");
}
}
else
{
CString str = path.Left(path.GetLength() - 3);
str += strFilename;
//do someting with this file;
}
bRes = FindNextFile(Hfile, &fileInfo);
}
FindClose(Hfile);
}
调用该函数的时候,比如给出的path是 "D:\\test",那么后面还得加上"\\*.*",也就是"D:\\text\\*.*" .
三、批量删除代码中的/**/注释
首先需要明白,在c类似的代码中,/**/的注释原理是,在一个/*后面,发现的第一个*/便和其配对,不管中间是什么内容。
所以该方法很明确,一行一行的读取代码内容,如果发现/*,那么在本行找到*/,从*/的下一个位置继续确认,知道本行的结束,如果多出了/*,可以肯定下面某一行的
某个位置第一次出现的*/便和其配对。
四、关于文件中的0d0a.
在windows环境下,用户输入回车符0d后,系统会默认在前面加一个tab符,也就是0a。而用类似于Cstring的成员函数GetString这样的函数读取一行,在其倒数第二个字符绝对
是0a,而不是完完全全的你所看到的一行字符。