文件流问题(急)

cornsky 2009-02-12 09:10:14
#include <fstream>
#include <iostream>
using namespace std;

void main()
{
char i;
fstream fs,fb;
fs.open("haha.txt",ios::in | ios::out); //ios::binary

fb.open("b.txt",ios::in | ios::out);
while(!fs.eof())
{
fs>>i;

if(fs.eof()) break;
cout<<i;

fb<<i;
}
fs.close();
fb.close();

}
问题:运行后没有创建b.txt文件。

请问上面的代码为什么不能创建b.txt文件,并把haha.txt中内容放到b.txt中。
谁能详细的解释一下输入流的问题:怎样把输入文件流一部分一部分的放入一个字符串中,
并把修改后的字符串放入另一个输出文件流中。(其实就是想修改文件中的内容,但不用替换的方法修改)

谢谢!
...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cornsky 2009-02-12
  • 打赏
  • 举报
回复
呵呵,好的,非常感谢。我试试去。
jiangheng2008 2009-02-12
  • 打赏
  • 举报
回复

#include <iostream>
#include <fstream>
#include<string>
using namespace std;

int main()
{
ofstream outFile("b.txt",ios::out);
ifstream inFile("haha.txt", ios::in);
if (!(inFile && outFile))
{
cerr << "File could not be opened!" << endl;
exit(1);
}
string str;
while (getline(inFile, str))
{
string s1("我 是 中国人"); //修改后的字符
string s2("中国");//查找的对象
str.replace(str.find(s2,0),s2.length(),s1);
//要修改的话,在这里对str进行处理
outFile << str <<"\n";
}
return 0;
}
cornsky 2009-02-12
  • 打赏
  • 举报
回复
谢谢!
其实我想做的是:
一个 长的(中英文)字符串 替换原文件中的某个 短(中英文)字符串 ,然后把文本内容输出到另一个文本中。
(不修改原来的文本文件)。



例如用“我是 中国 人”代替文本中的“中国”。
jiangheng2008 2009-02-12
  • 打赏
  • 举报
回复

#include <iostream>
#include <fstream>
#include<string>
using namespace std;

int main()
{
ofstream outFile("b.txt",ios::out);
ifstream inFile("haha.txt", ios::in);
if (!(inFile && outFile))
{
cerr << "File could not be opened!" << endl;
exit(1);
}
string str;
while (getline(inFile, str))
{ //要修改的话,在这里对str进行处理
outFile << str <<"\n";
}
return 0;
}
qzl123666 2009-02-12
  • 打赏
  • 举报
回复
我试了一下确实不行,但是用ofstream 就可以
fdsa20041999 2009-02-12
  • 打赏
  • 举报
回复
呵呵,谢谢6楼的解释。我代替楼主在此谢过了。
bfhtian 2009-02-12
  • 打赏
  • 举报
回复
ls理解的不错,看看c++ primer上有详细的说明
old-six-programmer 2009-02-12
  • 打赏
  • 举报
回复
这个问题比较有意思

如果你用的是fstream对象,那么就需要确定流对象所关联的文件必须存在
否则,会发生错误
这时候你去调用流对象fs.fail()返回1
说明确实发生了错误,因为文件不存在

VS中可以显示添加打开方式 C
这样的话,可以创建文件
但是,这是一种不可移植的做法
因为gcc中不支持 ios_base::in | ios_base::out | ios::app 这种组合

如果要解释的话
我想可能C++规范中应该有描述
不过我没看过,呵呵

但是,我们逻辑上可以理解
因为,作为一个输入流对象,应该要关联一个已经存在的文件( ifstream的确是这样的 )
如果,被关联的文件不存在,我们不应该指望别人去帮你打开一个“未定义”的文件去关联

但是,输出流对象则不然

因此,楼主可以用ostream对象,正如4楼

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧