文件大小c与大小数据字符串的大小不同

sof*_*ofr 1 c windows file

我有一个文件,我正在写,然后将其大小更改为写入其中的文本大小:

FILE * file...
Run Code Online (Sandbox Code Playgroud)

我从文件中获取所有数据并将文件大小更改为数据大小,但它有所不同.字符串的大小小于文件长度,它会削减它并丢失数据.可能是什么问题?

while(fgets(cLine, sizeof(cLine), file) )
    str.append((string)cLine);
fputs(str.c_str(),file);
_chsize( fileno(file), (int)str.size() );
Run Code Online (Sandbox Code Playgroud)

当我检查它总是fileLength(fileno(file))大于str.size()!

Jar*_*aus 9

也许是CRLF?提防:

fopen(filename, "r")vs fopen(filename, "rb"),

同样地

fopen(filename, "w")VS fopen(filename, "wb").

原因是因为"r""w"将翻译CRLF,而将"rb""wb"将数据视为二进制.在大多数平台上,这被忽略了.例如,OS X上fopen手册页:

模式字符串还可以包括字母"b"作为第三个字符或者作为上述任意两个字符串中的字符之间的字符.这严格要求与ISO/IEC 9899:1990("ISO C90")兼容并且没有效果; "b"被忽略.

MSDN上fopen页面说了一些不同的东西:

b

以二进制(未翻译)模式打开; 涉及回车符和换行符的翻译被抑制.

如果未在模式中给出tb,则默认转换模式由全局变量_fmode定义.如果tb 以参数为前缀,则函数将失败并返回NULL.

有关使用文本和Unicode中的二进制模式和多字节流,我的详细信息/ O,看到文本和二进制模式文件I/O,并在文本和二进制模式Unicode流I/O.