首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VC6 /r/n和写作品;2013不工作

VC6 /r/n和写作品;2013不工作
EN

Stack Overflow用户
提问于 2014-09-16 03:16:36
回答 2查看 104关注 0票数 0

以下代码

代码语言:javascript
复制
    if(!cfile.Open(fileName, CFile::modeCreate | CFile::modeReadWrite)){
        return;
    }

    ggg.Format(_T("0    \r\n"));
    cfile.Write(ggg, ggg.GetLength()); 
    ggg.Format(_T("SECTION  \r\n"));
    cfile.Write(ggg, ggg.GetLength()); 

生成以下内容:0 SECTI

显然这是错误的:(a) \r\n被忽略,(b)字节被切断。

有人能告诉我我做错了什么吗?

在_T()中没有VC6的相同代码会产生正确的结果。

谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-16 03:32:23

你有没有考虑过换行,比如:

代码语言:javascript
复制
cfile.Write(ggg, ggg.GetLength()); 

到`

代码语言:javascript
复制
cfile.Write(ggg, ggg.GetLength() * sizeof(TCHAR))

写需要字节数(而不是字符)。因为Unicode有两个字节宽,所以您需要说明这一点。sizeof of (TCHAR)应该是每个字符在给定平台上的字节数。如果它构建为Ansi,它将是1,Unicode将有2。乘以字符串长度和字节数应该是正确的。

有关TCHAR的信息可以在MSDN文档这里上找到。特别是,它被定义为:

_TCHAR数据类型是在Tchar.h中有条件定义的。如果为您的构建定义了符号_UNICODE,则_TCHAR定义为wchar_t;否则,对于单字节和MBCS构建,则将其定义为char。(wchar_t,基本的Unicode宽字符数据类型,是8位有符号字符字符的16位对应。)

TCHAR_TCHAR在您的用法中应该是同义词。然而,我相信这些天微软建议包括<tchar.h>和使用_TCHAR。我不能告诉你的是,_TCHAR是否存在于VC6.0中。

如果使用上述方法--如果使用Unicode进行构建,则输出文件将位于Unicode中。如果您为Ansi构建,它将输出为8位ASCII。

希望CFile.write无论如何都能输出Ascii?读.

如果希望将所有文本作为8位ASCII写入文件,则必须使用其中一个宏进行转换。特别是CT2A。有关宏的更多信息可以在这个MSDN 文章中找到。每个宏都可以按名称进行细分,但是CT2A说根据链接处的图表将Generic character string (equivalent to W when _UNICODE is defined, equivalent to A otherwise)转换为Ascii。因此,不管是使用Unicode还是Ascii,它都会输出Ascii。您的代码应该类似于:

代码语言:javascript
复制
ggg.Format(_T("0    \r\n"));
cfile.Write(CT2A(ggg), ggg.GetLength());
ggg.Format(_T("SECTION  \r\n"));
cfile.Write(CT2A(ggg), ggg.GetLength());

由于宏将所有内容转换为Ascii的GetLength()就足够了。

票数 0
EN

Stack Overflow用户

发布于 2014-09-16 03:27:21

显然,您正在构建一个Unicode构建;CString (大概就是ggg )保存了一个wchar_t字符序列,每个字符都有两个字节大。ggg.GetLength()是以字符为单位的字符串的长度。

但是,CFile::Write的长度以字节为单位,而不是以字符为单位。您正在传递字符串实际占用的字节数的一半,因此只编写了一半的字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25860123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档