ifstream 读入文件过滤掉了 \r ?

bborn 2007-08-11 07:59:19
ifstream ifs("c:\\wordutf8.txt");
unsigned long len ;

ifs.seekg( 0 , ios::end);
len = ifs.tellg();
ifs.seekg( 0 , ios::beg);

char *buf = new char[len];
memset( buf , 0x00 ,len);
ifs.read( buf , len);

文件的换行是 \r\n 也就是 0d0a
读取后 查看内存 只有 0x0a 了
请问这是为什么
...全文
171 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bborn 2007-08-13
谢谢
  • 打赏
  • 举报
回复
emptyness 2007-08-12
查看了下模式的说明: 摘自VC++深入详解

1
"
当按照文本方式向文件写入数据时,遇到0a转换成0d0a,
读取文件时遇到0d0a 转换成0a
"

即该方式保证windows存储文件里的换行是0d0a 为什么这样做? 因为无聊.

2.
" 2进制方式保持内存存储原样...."

" 所以打开文件和读取文件 应该使用同一种模式"
  • 打赏
  • 举报
回复
zhengwei1984222 2007-08-12
ifstream( const char* szName, int nMode = ios::in, int nProt = filebuf::openprot );
默认文本打开.0d0a转换为0a
  • 打赏
  • 举报
回复
emptyness 2007-08-11
设置下模式 应该消除掉的..你查查有没有关于ifstream的 设置..
  • 打赏
  • 举报
回复
emptyness 2007-08-11
那也许就是过滤掉了吧...
记得有些函数确实会自做主张给你加上0d或者0a的,比如CStdioFile.
不了解 ifstream

也许它正好做相反工作看见0d0a就删除一个0d....呵呵..
  • 打赏
  • 举报
回复
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2007-08-11 07:59
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……