如何读取流文件内容

xspace_time 2012-09-26 09:18:51
#include<iostream>
#include <fstream>
#include<string>
using namespace std;

int main()
{
string str;
fstream fsfile,newfile;
fsfile.open("file.txt",ios::in|ios::out|ios::trunc);
newfile.open("newfile.txt",ios::in|ios::out|ios::trunc);
fsfile<<"我不是黄蓉 我不会武功\n我只要靖哥哥 完美的爱情\n我不是黄蓉 我整天做梦\n";
fsfile<<"在夜里唱情歌 失恋也英雄\n我没有香香公主的美丽\n也没有建宁公主的权利\n";
fsfile<<"我希望找到老实的郭靖 对人诚恳对事精明\n他不要像韦小宝多情也不要像杨过般冷冷清清\n";
fsfile<<"直到我头发花白牙齿掉光 找到我实实在在的爱情\n我不是黄蓉我不会武功\n";
fsfile<<"我只要靖哥哥完美的爱情\n我不是黄蓉我整天做梦\n在夜里唱情歌失恋也英雄\n";
fsfile.seekp(0);
cout<<fsfile.rdbuf()<<endl<<endl;
str="在夜里唱情歌失恋也英雄\n我没有香香公主的美丽\n也没有建宁公主的权利\n";
cout<<str;
fsfile.close();
system("pause");
return 0;
}

我现在想从file.txt里取出一段内容 这段内容就是str=后面的那一段 然后赋值给str 使得效果和直接把那一段赋值给str相同
类似fsfile.getc() getline(fsfile,str,'\n') cout<<str<<endl 的尽量不要cout<<endl 到屏幕和文件
尽量用类似getline的流操作
我想要直接定位到第3个换行符后面 也就是第四行开始 然后读取三行包括换行符 原样输出到屏幕并原样输出到newfile.txt

我多给点分吧 因为个人认为想要一个好的答案 一般情况下应该给更高的分数
...全文
174 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxy10 2012-10-03
  • 打赏
  • 举报
回复
这个可能更好一点。

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

int main()
{
string str;
fstream fsfile,newfile;
fsfile.open("file.txt",ios::in|ios::out|ios::trunc);
newfile.open("newfile.txt",ios::in|ios::out|ios::trunc);
fsfile<<"我不是黄蓉 我不会武功\n我只要靖哥哥 完美的爱情\n我不是黄蓉 我整天做梦\n";
fsfile<<"在夜里唱情歌 失恋也英雄\n我没有香香公主的美丽\n也没有建宁公主的权利\n";
fsfile<<"我希望找到老实的郭靖 对人诚恳对事精明\n他不要像韦小宝多情也不要像杨过般冷冷清清\n";
fsfile<<"直到我头发花白牙齿掉光 找到我实实在在的爱情\n我不是黄蓉我不会武功\n";
fsfile<<"我只要靖哥哥完美的爱情\n我不是黄蓉我整天做梦\n在夜里唱情歌失恋也英雄\n";
fsfile.seekp(0);
cout<<fsfile.rdbuf()<<endl<<endl;
//str="在夜里唱情歌失恋也英雄\n我没有香香公主的美丽\n也没有建宁公主的权利\n";

fsfile.seekg(0); //移到开头
int line =3;
while(line--)
getline(fsfile,str); //移动三行

string str1;
line = 3;
while( line-- ){
getline(fsfile,str); //读入三行
if( line!=0 )
str +='\n'; //没有读到换行符,要加上
str1 += str;
}

newfile<< str1; //写入newfile
puts( str1.c_str() ); //输出到屏幕

newfile.close();
fsfile.close();
system("pause");
return 0;
}
huangxy10 2012-10-03
  • 打赏
  • 举报
回复
不知是否满足要求,如果不知道字节数,也可以在文件中查。


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

int main()
{
string str;
fstream fsfile,newfile;
fsfile.open("file.txt",ios::in|ios::out|ios::trunc);
newfile.open("newfile.txt",ios::in|ios::out|ios::trunc);
fsfile<<"我不是黄蓉 我不会武功\n我只要靖哥哥 完美的爱情\n我不是黄蓉 我整天做梦\n";
fsfile<<"在夜里唱情歌 失恋也英雄\n我没有香香公主的美丽\n也没有建宁公主的权利\n";
fsfile<<"我希望找到老实的郭靖 对人诚恳对事精明\n他不要像韦小宝多情也不要像杨过般冷冷清清\n";
fsfile<<"直到我头发花白牙齿掉光 找到我实实在在的爱情\n我不是黄蓉我不会武功\n";
fsfile<<"我只要靖哥哥完美的爱情\n我不是黄蓉我整天做梦\n在夜里唱情歌失恋也英雄\n";
fsfile.seekp(0);
cout<<fsfile.rdbuf()<<endl<<endl;
//str="在夜里唱情歌失恋也英雄\n我没有香香公主的美丽\n也没有建宁公主的权利\n";

fsfile.seekg( 71, 0); //找到第三段的开头
int cnt = 65;
char str1[66];
fsfile.read( str1, cnt ); //读入三段内容
str1[cnt]='\0';

newfile.write( str1, cnt ); //写入newfile
puts( str1 ); //输出到屏幕
newfile.close();

fsfile.close();
system("pause");
return 0;
}
pathuang68 2012-10-02
  • 打赏
  • 举报
回复
如果是要找到某行输出,建议还是别用流了,这不是流的本质。
qq120848369 2012-10-02
  • 打赏
  • 举报
回复
建议整个文件读到内存直接找换行符,要么内存映射。

用文本操作接口去找第三行这种需求是没前途的。
xspace_time 2012-10-02
  • 打赏
  • 举报
回复
没有流高手吗 修改流类实现也可以 顶一次5分 没有最好的答案次好的答案也可以
xspace_time 2012-09-26
  • 打赏
  • 举报
回复
沉了 降价销售

降低标准 读取 前三行存入str 原样显示出来 不要用单字符读取判断 要用流 使用intel的流指令也可

65,206

社区成员

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

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