如何从 Unicode 中的 CFile::Read() 文件中获取 CString 对象?

Posted

技术标签:

【中文标题】如何从 Unicode 中的 CFile::Read() 文件中获取 CString 对象?【英文标题】:How to get a CString object from a file with CFile::Read() in Unicode? 【发布时间】:2009-09-27 07:57:48 【问题描述】:

字符集是 Unicode。我想将一个 CString 类型的字符串写入一个文件,然后再从文件中读出它。 我使用 CFile::Write() 方法将字符串写入文件:

int nLen = strSample.GetLength()*sizeof(TCHAR);
file.Write(strSample.GetBuffer(), nLen);

问题来了:我想从包含 strSample 内容的文件中获取 CString。我该怎么做?

非常感谢!

【问题讨论】:

请注意,对 GetBuffer 的调用是多余的,并且可能会导致问题,因为它有一些副作用。在这里,您只需要一个 LPCTSTR,所以只需使用 (LPCTSTR)strSample 左右。它安全且效率更高(只是不要那样修改字符串)。如果确实调用了 GetBuffer,请确保之后调用 ReleaseBuffer。 我使用 (LPCTSTR)strSample 将字符串写入文件时可以。但是如何使用 (LPCTSTR)strsample 从文件中读取字符串? 【参考方案1】:
UINT nBytes = (UINT)file.GetLength();
int nChars = nBytes / sizeof(TCHAR);
nBytes = file.Read(strSample.GetBuffer(nChars), nBytes);
strSample.ReleaseBuffer(nChars);

【讨论】:

【参考方案2】:

我想你忘了在末尾加上“\0”

strSample.GetLength() + 1

【讨论】:

【参考方案3】:

我会试试这个,因为文件可能比读取的文件大(DOS 风格的结束行)。 Read 不会设置最终的 \0,但如果没有使用 -1 调用,ReleaseBuffer 显然会这样做。

UINT nBytes = (UINT)file.GetLength();
UINT nBytesRead = file.Read(strSample.GetBuffer(nBytes+1), nBytes);
strSample.ReleaseBuffer(nBytesRead);

【讨论】:

以上是关于如何从 Unicode 中的 CFile::Read() 文件中获取 CString 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 中的 __unicode__() 函数中查询数据差异

如何从python中的unicode字符串中删除除数字和“,”之外的所有字符?

Unicode 字符如何映射到字体中的字形?

Python 2.7:如何将字符串中的 unicode 转义转换为实际的 utf-8 字符

c++ 编译器如何从 utf8 源文件生成 unicode 字符串文字

为啥我的支持 unicode 的软件无法识别 ANSI 文件中的“Š”和其他字符?如何解决?