CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  工具平台和程序库

fstream: 为什么多了三个字节?

楼主mllee(阿磊)2003-09-03 12:41:34 在 C/C++ / 工具平台和程序库 提问

我想向磁盘上写一个   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

相关问题

  • 为什么多一个字节?
  • 串口发送16进制数有没有字节数限制?为什么我每次只能发送4000多个字节,其余的被截断?
  • 在VC中用fwrite()写位图文件时,为什么会多出很多字节来!!!
  • 我在EXCEL中用VBA将数据倒入SQLSERVER时,为什么最多只能倒256字节。
  • *.txt 文件的大小总比 实际内容的大小多两个字节 是为什么?
  • 实现dos下的copy功能,为什么每一次都多了一个字节(FILE),请高手回答
  • CInternetFile返回的文件长度为什么总是792字节?
  • 为什么24位真彩位图是双字节对齐的?
  • URL中文编码为什么总是3字节?
  • 为什么传上去的文件都是0字节???

关键词

  • 文件
  • 写入
  • std
  • 方式操作
  • txt
  • write
  • include
  • test
  • char

得分解答快速导航

  • 帖主:mllee
  • xueweizhong

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo