C++ 简单读写文本文件要点.docx

上传人:b****9 文档编号:25710723 上传时间:2023-06-11 格式:DOCX 页数:11 大小:62.17KB
下载 相关 举报
C++ 简单读写文本文件要点.docx_第1页
第1页 / 共11页
C++ 简单读写文本文件要点.docx_第2页
第2页 / 共11页
C++ 简单读写文本文件要点.docx_第3页
第3页 / 共11页
C++ 简单读写文本文件要点.docx_第4页
第4页 / 共11页
C++ 简单读写文本文件要点.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C++ 简单读写文本文件要点.docx

《C++ 简单读写文本文件要点.docx》由会员分享,可在线阅读,更多相关《C++ 简单读写文本文件要点.docx(11页珍藏版)》请在冰豆网上搜索。

C++ 简单读写文本文件要点.docx

C++简单读写文本文件要点

C++简单读写文本文件、统计文件的行数、读取文件数据到数组

fstream提供了三个类,用来实现c++对文件的操作。

(文件的创建、读、写)。

ifstream--从已有的文件读

ofstream--向文件写内容

fstream-打开文件供读写

文件打开模式:

ios:

:

in            读

ios:

:

out           写

ios:

:

app           从文件末尾开始写

ios:

:

binary        二进制模式

ios:

:

nocreate      打开一个文件时,如果文件不存在,不创建文件。

ios:

:

noreplace     打开一个文件时,如果文件不存在,创建该文件

ios:

:

trunc         打开一个文件,然后清空内容

ios:

:

ate           打开一个文件时,将位置移动到文件尾

文件指针位置在c++中的用法:

ios:

:

beg  文件头

ios:

:

end  文件尾

ios:

:

cur  当前位置

例子:

file.seekg(0,ios:

:

beg);  //让文件指针定位到文件开头 

file.seekg(0,ios:

:

end);  //让文件指针定位到文件末尾 

file.seekg(10,ios:

:

cur);  //让文件指针从当前位置向文件末方向移动10个字节 

file.seekg(-10,ios:

:

cur);  //让文件指针从当前位置向文件开始方向移动10个字节 

file.seekg(10,ios:

:

beg);  //让文件指针定位到离文件开头10个字节的位置

常用的错误判断方法:

good()  如果文件打开成功

bad()  打开文件时发生错误

eof()  到达文件尾

实例:

一、写入文件

#include

#include

usingnamespacestd;

voidmain()

{

   ofstreamin;

in.open("com.txt",ios:

:

trunc);//ios:

:

trunc表示在打开文件前将文件清空,由于是写入,文件不存在则创建

inti;

chara='a';

for(i=1;i<=26;i++)//将26个数字及英文字母写入文件

{

  if(i<10)

  {

   in<<"0"<

   a++;

  }

  else

  {

   in<

   a++;

  }

}

in.close();//关闭文件

}

打开com.txt,效果如下:

二、读取文件

上面仅仅是将文本写入文件,并没有读取出来。

以下为读取文件的一种方法:

将文件每行内容存储到字符串中,再输出字符串

#include

#include

usingnamespacestd;

voidmain()

{

charbuffer[256];

fstreamout;

out.open("com.txt",ios:

:

in);

cout<<"com.txt"<<"的内容如下:

"<

while(!

out.eof())

{

  out.getline(buffer,256,'\n');//getline(char*,int,char)表示该行字符达到256个或遇到换行就结束

  cout<

}

out.close();

cin.get();//cin.get()是用来读取回车键的,如果没这一行,输出的结果一闪就消失了

}

逐个字符的读取文件:

#include

#include

usingnamespacestd;

voidmain()

{

fstreamin;

charc;

in.open("comn.txt",ios:

:

in);

while(!

in.eof())

{

  in>>c;

  cout<

}

in.close();

cin.get();

}

这个方法读取的文件,所有字符都一起显示,不会分行。

这里字母z显示两次,是正常的,因为在输出文件最后一个字母z之后,又输出了一次(可以仔细考虑程序代码)。

读取文件某一行内容:

#include

#include

#include

usingnamespacestd;

intCountLines(char*filename)

{

ifstreamReadFile;

intn=0;

stringtmp;

ReadFile.open(filename,ios:

:

in);//ios:

:

in表示以只读的方式读取文件

if(ReadFile.fail())//文件打开失败:

返回0

{

  return0;

}

else//文件存在

{

  while(getline(ReadFile,tmp))

  {

   n++;

  }

  returnn;

}

ReadFile.close();

}

stringReadLine(char*filename,intline)

{

intlines,i=0;

stringtemp;

fstreamfile;

file.open(filename,ios:

:

in);

lines=CountLines(filename);

if(line<=0)

{

  return"Error1:

行数错误,不能为0或负数。

";

}

if(file.fail())

{

  return"Error2:

文件不存在。

";

}

if(line>lines)

{

  return"Error3:

行数超出文件长度。

";

}

while(getline(file,temp)&&i

{

  i++;

}

file.close();

returntemp;

}

voidmain()

{

intl;

charfilename[256];

cout<<"请输入文件名:

"<

cin>>filename;

cout<<"\n请输入要读取的行数:

"<

cin>>l;

cout<

cin.get();

cin.get();

}

很显然,根据以上程序,利用循环,可以逐行读取整个文件内容。

三、统计文件的行数

#include

#include

usingnamespacestd;

intCountLines(char*filename)

{

ifstreamReadFile;

intn=0;

charline[512];

ReadFile.open(filename,ios:

:

in);//ios:

:

in表示以只读的方式读取文件

if(ReadFile.fail())//文件打开失败:

返回0

{

  return0;

}

else//文件存在

{

  while(!

ReadFile.eof())

  {

   ReadFile.getline(line,512,'\n');

   n++;

  }

  returnn;

}

ReadFile.close();

}

voidmain()

{

cout<<"comn.txt的行数为:

"<

cin.get();

}

以上程序的设计思路没有问题,但在实际操作的时候会发现统计出的行数与实际不符,原因在于ReadFile.getline(line,512,'\n')这一句:

当一行字符超过512或遇到回车之后,行数自动加1.如果换行符在新的一行,返回的结果会比实际多1;如果不在新的一行,返回结果与实际相符。

可以修改如下:

#include

#include

#include

usingnamespacestd;

intCountLines(char*filename)

{

ifstreamReadFile;

intn=0;

charline[512];

stringtemp;

ReadFile.open(filename,ios:

:

in);//ios:

:

in表示以只读的方式读取文件

if(ReadFile.fail())//文件打开失败:

返回0

{

  return0;

}

else//文件存在

{

while(getline(ReadFile,temp))

{

  n++;

}

   returnn;

}

ReadFile.close();

}

voidmain()

{

cout<<"comn.txt的行数为:

"<

cin.get();

}

四、读取文件数据到数组

#include 

#include

#include

usingnamespacestd;

intCountLines(char*filename)//获取文件的行数

{

ifstreamReadFile;

intn=0;

stringtemp;

ReadFile.open(filename,ios:

:

in);//ios:

:

in表示以只读的方式读取文件

if(ReadFile.fail())//文件打开失败:

返回0

{

  return0;

}

else//文件存在,返回文件行数

{

  while(getline(ReadFile,temp))

  {

   n++;

  }

  returnn;

}

ReadFile.close();

}

voidmain() 

ifstreamfile; 

intLINES;

charfilename[512];

cout<<"请输入要打开的文件名:

"<

cin>>filename;

file.open(filename,ios:

:

in);

if(file.fail())

{

cout<<"文件不存在."<

file.close();

cin.get();

cin.get();

}

else//文件存在

{

LINES=CountLines(filename);

int*tc=newint[LINES]; 

char*t=newchar[LINES]; 

inti=0; 

while(!

file.eof())//读取数据到数组

file>>tc[i]; 

file>>t[i]; 

i++; 

file.close();//关闭文件

for(i=0;i

cout<

cin.get();

cin.get();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1