作者flax00298 (NI)
看板C_and_CPP
标题[问题] 几个FSTREAM的小问题
时间Mon Aug 3 09:59:51 2009
很久以前修课的时候
教授丢给我们的期末专案
是文书编辑器
那时候连个物件都不太会宣告
最近把它写写看的时候
遇到了几个FSTREAM的问题
1.
我看C++ PRIMIER上面写说
在宣告一个FSTREAM物件的时候
OPEN一个档案
如果那个档案不存在
就会帮你CREATE
可是我试过了好像不是这麽一回事??
怎麽开不存在的档案都是失败的
2.
我试图用IFSTREAM读.TXT里面的字串
我测试了一下
比如说~我的内容是:
hello
world
然後用ifstream的物件呼叫>>复制到传统C字串里面
CODE的话是这样
fstr>>str; 出来是hello
fstr>>str>>str; 出来就变成了world
如果我呼叫getline一次或两次,效果跟上面一样
所以其实>>和getline是在做同样的事情吗?
我又试了呼叫get
http://www.cplusplus.com/reference/iostream/istream/get/
然後我用的是这个get:
istream& get ( char* s, streamsize n );
他里面的说明是说
超出size或是遇到'\n'的时候会结束
呼叫一次也是hello
再呼叫一次就变成什麽都没有了
我看了看原因是因为
本来的hello的第一个,也就是h变成了'\0'
然後函数理所当然也因为遇到'\0'就结束了
这样的话起始的地方不就每次都从'\0'开始了吗
要怎麽解决这个问题呢?
有办法直接控制他从哪里开始读吗?
3.
如果说要COPY档案所有的内容
到一堆自串矩阵里面
我要怎麽得知他在哪一行已经结束了?
例如说我为了要COPY文件的字串一开始开了5000个
到底的时候再创五千个继续存
现在文件只有100行
我要怎麽让回圈适可而止呢?
4.
http://www.cplusplus.com/reference/iostream/fstream/open/
这个网页说
The function effectively calls rdbuf()->open(filename,mode).
但是我一直想不通直接用串流物件呼叫OPEN就好了阿
effectively是??
不好意思文章很冗长
谢谢各位看完
小弟表达能力不佳
伤害各位的眼睛了ˊˋ
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.233.148.84
1F:推 kameng:2的 >>遇到" "或换行都会停 getline只会遇到换行才停 08/03 12:40
2F:→ kameng:3. 你看看你指的是不是.eof() 到文件最後就会停止 08/03 12:42
3F:→ kameng:4 我自己通常都在建立的时候就一起宣告档案地址 很少会用到 08/03 12:43
4F:→ kameng:open 08/03 12:44
5F:→ kameng: 位 08/03 12:44
6F:→ flax00298:=口=...真的耶...有路径就会创造,只有档名就不会 08/03 15:39
7F:→ flax00298:太感谢了~奔多问题都一起解决了!!阿里家多!! 08/03 15:40
8F:→ flax00298:搞错了...还是没有办法解决问题一... 08/03 15:53
9F:→ flax00298:不好意思~请问宣告档案位址和OPEN的使用的关系是? 08/03 15:54
10F:→ kameng:或者说得不清楚吧 如果你的object只写或读一个档案的话 08/03 19:46
11F:→ kameng:通常在宣布这个object时我们都会连档案名一起宣告 08/03 19:48
12F:→ kameng:fstream a("xxx.txt",ios::XXX)这样,省却了要呼叫一次open 08/03 19:48
13F:→ kameng:的步骤 所以其实..也不会经常用到open 反倒是close一定要用 08/03 19:49
14F:→ kameng:刚测试了,只有ofstream可以在档案不存在时建立新的档案 08/03 20:32
15F:→ kameng:fstream跟ifstream都要档案存在才能继续 08/03 20:33