现在的位置: 首页 > 综合 > 正文

c++ 读写文件

2013年12月03日 ⁄ 综合 ⁄ 共 2455字 ⁄ 字号 评论关闭

写文件

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

int main()
{
ofstream out;
out.open("com.txt",ios::trunc); //ios::trunc表示在打开文件前将文件清空,由于是写入,文件不存在则创建
int i;
char a='a';
for(i=1;i<=26;i++)//将26个数字及英文字母写入文件
{
   if(i<10)
   {
    out<<"0"<<i<<"\t"<<a<<"\n";
    a++;
   }
   else
   {
    out<<i<<"\t"<<a<<"\n";
    a++;
   }
}
out.close();//关闭文件
return 0;
}

读文件

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

int main()
{
char buffer[256];
fstream out;
out.open("com.txt",ios::in);
cout<<"com.txt"<<" 的内容如下:"<<endl;
while(!out.eof())
{
   out.getline(buffer,256,'\n');//getline(char *,int,char) 表示该行字符达到256个或遇到换行就结束
   cout<<buffer<<endl;
}
out.close();
cin.get();//cin.get() 是用来读取回车键的,如果没这一行,输出的结果一闪就消失了

return 0;
}

读取某一行

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

int CountLines(char *filename)
{
ifstream ReadFile;
int n=0;
string tmp;
ReadFile.open(filename,ios::in);//ios::in 表示以只读的方式读取文件
if(ReadFile.fail())//文件打开失败:返回0
{
   return 0;
}
else//文件存在
{
   while(getline(ReadFile,tmp))
   {
    n++;
   }
   return n;
}
ReadFile.close();
}

string ReadLine(char *filename,int line)
{
int lines,i=0;
string temp;
fstream file;
file.open(filename,ios::in);
lines=CountLines(filename);
if(line<=0)
{
   return "Error 1: 行数错误,不能为0或负数。";
}
if(file.fail())
{
   return "Error 2: 文件不存在。";
}
if(line>lines)
{
   return "Error 3: 行数超出文件长度。";
}
while(getline(file,temp)&&i<line-1)
{
   i++;
}
file.close();
return temp;
}

int  main()
{
int l;
char filename[256];
cout<<"请输入文件名:"<<endl;
cin>>filename;
cout<<"\n请输入要读取的行数:"<<endl;
cin>>l;
cout<<ReadLine(filename,l);
cin.get();
cin.get();

return 0;
}

控制台输出:

pateo@pateo-B86N53X:~/work/study$ g++ -o main main.cc  
pateo@pateo-B86N53X:~/work/study$ ./main 
请输入文件名:
com.txt 

请输入要读取的行数:
12
12	l

读取整个有多少行

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

int CountLines(char *filename)
{
ifstream ReadFile;
int n=0;
char line[512];
string temp;
ReadFile.open(filename,ios::in);//ios::in 表示以只读的方式读取文件
if(ReadFile.fail())//文件打开失败:返回0
{
   return 0;
}
else//文件存在
{
while(getline(ReadFile,temp))
{
   n++;
}
    return n;
}

ReadFile.close();
}
int main()
{
cout<<"comn.txt的行数为: "<<CountLines("com.txt")<<endl;
cin.get();
return 0;
}

说明:

ios::app 添加到文件尾
ios::ate 把文件标志放在末尾而非起始。
ios::trunc 默认. 截断并覆写文件。
ios::nocreate 文件不存在也不创建。
ios::noreplace 文件存在则失败。

 ios::binary 以二进制模式进行IO操作


ios_base::beg ——文件开始位置

ios_base::cur ——文件当前位置

ios_base::end ——文件末尾位置

下面以seekg为例说明一下指针移动的方法:

file.seekg(3)   ——指针移动到第三个字符的位置

file.seekg(ios_base::beg) ——指针移动到文件开头

file.seekg(ios_base::end) ——指针移动到文件末尾

file.seekg(-3,ios_base::cur) ——指针当前位置向前移动三个字符

file.seekg(3,ios_base::cur) ——指针当前位置向后移动三个字符

file.seekg(3,file.tellg()) ——指针当前位置向后移动三个字符

file.seekg(file.tellg()+3) ——指针当前位置向后移动三个字符

对文件操作完毕后别忘了关闭文件

file.close();



抱歉!评论已关闭.