写文件
#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();