流式输入输出的问题,

bluewinwind 2006-04-28 07:30:10
最近决定使用纯C++编程,但是可以对于一些库非常的不熟悉,所以效率非常低下,下午更是被一个如果使用CFile就简单搞定的问题纠缠了一下午,此问题如下:

ifstream fin("c:\\temp.txt");
char buf[1024];
如何使得每次读入到buf的文件数据为1024个字节,如利用CFile实现,则简单多了:
CFile file;
if(!file.Open("c:\\temp.txt",CFile::modeRead))
{
cerr<<"open file error"<<endl;
return ;
}
int len=file.getLength();
int nread;
do{
nread=CFile.Read(buf,1024);
len-=nread;
}while(len>0);
file.Close();
请问怎么才能使用流式输出来达到上面CFile的效果,急求。
...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dch4890164 2006-04-29
  • 打赏
  • 举报
回复
写成如下模板
template <typename T>
void redbuf(char* filename,T* outdata,int size)
{
ifstream inputfile(filename);
int i = 0;
while (inputfile>>outdata[i])
{
i++;
if (i == size)
{
break;
}
}

return;
}
dch4890164 2006-04-29
  • 打赏
  • 举报
回复
要不楼主将上面的函数改成模板也可以。
只是我会用模板不会写模板。
dch4890164 2006-04-29
  • 打赏
  • 举报
回复
CFile.Read(buf,1024);
其本身也是一个函数,以楼主的意思,它的优势是可以读取任意大小的空间
这个方法可以吗,我认为可以
#include <iostream.h>
#include <fstream.h>
void redbuf(char* filename,char* outdata,int size)
{
ifstream inputfile(filename);
int i = 0;
while (inputfile>>outdata[i])
{
i++;
if (i == size)
{
break;
}
}

return;
}

void main()
{
ofstream outfile("data.txt");
for(int i = 0;i<5000;i++)
{
outfile<<i<<" ";//这里没有添加回车
}
char data[1024];
redbuf("data.txt",data,1024);

for(i = 0;i<1024;i++)
{
cout<<data[i]<<endl;
}
return;
}
流的功能很强大,只是我们还有很好的掌握它
其实流下面有redhug这个函数,只是我不知道怎么样。
bluewinwind 2006-04-29
  • 打赏
  • 举报
回复
其实楼上给出的两种办法我已经都试过,但是好像都没有满足我上面的要求,我希望每次都能读出任意长度的文件数据,而不是仅仅指的1024,如果一行比较长的话,这样会导致溢出,因为我们本身不知道这一行有多长,也不能由自己来控制读取的长度。
du51 2006-04-29
  • 打赏
  • 举报
回复
有文件结束符,不用知道文件大小.
要知道C里也有函数的.
cnhgj 2006-04-28
  • 打赏
  • 举报
回复
int main()
{
ifstream ist("c:\\parm.txt");
if (ist)
{
while(!ist.eof())
{
char word[1024];
ist.getline(word, 1024);
cout<<word<<endl;
}
ist.close();
}
return 0;
}

64,653

社区成员

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

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