我有一个文件,我正在写,然后将其大小更改为写入其中的文本大小:
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()!
也许是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"被忽略.
b
以二进制(未翻译)模式打开; 涉及回车符和换行符的翻译被抑制.
如果未在模式中给出t或b,则默认转换模式由全局变量_fmode定义.如果t或b 以参数为前缀,则函数将失败并返回NULL.
有关使用文本和Unicode中的二进制模式和多字节流,我的详细信息/ O,看到文本和二进制模式文件I/O,并在文本和二进制模式Unicode流I/O.