fstream: 为什么多了三个字节?
我想向磁盘上写一个 1024 字节的文件,结果文件的大小为 1027 字节,这是为什么?
#include <fstream>
void f()
{
using namespace std;
fstream f("D:\test");
char s[1024];
f.write(s, 1024);
f.close();
}
问题点数:40、回复次数:8Top
1 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2003-09-03 12:44:58 得分 0
还有文件信息要写进去呢Top
2 楼mllee(阿磊)回复于 2003-09-03 12:45:33 得分 0
文件信息不写进去,要是写进去的话早不止三个字节了Top
3 楼xueweizhong(薛卫忠)回复于 2003-09-03 13:14:53 得分 40
这里有一个很关键的问题:
关于C++ STD文件流
1: 如果以二进制方式操作文件,读取和写入文件时的字节流不会做转换。
2: 如果以文本方式操作文件,会根据操作系统的不同,做一些字符转换:
比如在WINDOWS上 写入文件时,写入'\n', 在文件里表现为'\r\n'。
现在在你的例子中:
你写入的1024个字节没有初始化,多了三个字节基本上就表现为
1024个字节里含有三个‘\n'.
试一下二进制方式,再也不会多字节,而是精确匹配:
#include <fstream>
int main()
{
std::ofstream f("D:\\test.txt", std::ios::binary);
char s[1024] ={...}; // do some init
s[1] = '\n';
f.write(s, 1024);
}
而缺省情况下为文本方式操作,下面例子中将多出一个字节。
#include <fstream>
int main()
{
std::ofstream f("D:\\test.txt");
char s[1024]= {...} //do some init here
s[1] = '\n';
f.write(s, 1024);
}
Top
4 楼Tinybaby(喝蚊子的牛奶)回复于 2003-09-03 13:35:40 得分 0
同意楼上的说法Top
5 楼wisdomr(风碎)回复于 2003-09-04 10:35:20 得分 0
给分吧,那么经典的回答Top
6 楼tonybaobao(Tony宝宝)回复于 2003-09-04 11:18:27 得分 0
关键是你没有确定文件的后缀名,如果确定是.txt文件,绝对不会多写的,和什么初始化没有关系。Top
7 楼sakurar(开发者绝不是好玩家)回复于 2003-09-04 11:46:46 得分 0
每个0x0D都被换成了0x0D0A,所以多出了三个。
不信你看看文件里。
建议你用fopen、fwrite来写文件。Top
8 楼mllee(阿磊)回复于 2003-09-27 11:56:38 得分 0
谢谢薛卫忠Top




