转载自:黑凤梨の博客
文件处理
案例一(fstream):
#include <iostream>
#include<fstream>
using namespace std;
int main()
{
char buffer[256];
fstream out;
//ios::in表示以只读的方式读取文件
out.open("1.txt", ios::in);
cout << "1.txt" << "的内容如下:" << endl;
while (!out.eof())
{
//getline(char *,int,char)表示该行字符达到256个或者遇到换行符就结束
out.getline(buffer, 256, '\n');
cout << buffer << endl;
}
out.close();
//cin.get()是用来读取回车键的,如果没有这一行,输出结果一闪就消失了
cin.get();
system("pause");
return 0;
}
1.txt
1 无花无酒过清明
2 兴味萧然似野僧
3 昨日邻家乞新火
4 晓窗分与读书灯
案例二(ifstream):
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int CountLines(const char* filename)
{
ifstream ReadFile;
int n = 0;
char line[512];
string temp;
ReadFile.open(filename, ios::in);
//文件打开失败,返回
if (ReadFile.fail())
{
return 0;
}
else
{
//getline (istream & is, string& str, char delim);
//is:表示一个输入流,例如 cin。
//str:用来存储输入流中的信息
//delim:自定义结束字符,默认是 '\n '
while (getline(ReadFile, temp))
{
n++;
}
return n;
}
ReadFile.close();
}
int main()
{
cout << "1.txt的行数为:" << CountLines("1.txt") << endl;
system("pause");
return 0;
}
案例三(ofstream):
#include <iostream>
#include<fstream>
using namespace std;
int main()
{
ofstream in;
//ios::trunc表示再打开文件前将文件清空,由于是写入,
//因此,若文件不存在,侧创建文件
in.open("com.txt", ios::trunc);
int i;
char a = 'a';
for (i = 1;i < 27;i++)
{
if (i < 10)
{
in << "0"<<i << "\t" << a << "\n";
a++;
}
else
{
in << i << "\t" << a << "\n";
a++;
}
}
in.close();
system("pause");
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);
//文件打开失败,返回
if (ReadFile.fail())
{
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 << "请输入要读取的行数:" << endl;
cin >> l;
cout << ReadLine(filename, l);
cin.get();
cout << endl;
system("pause");
return 0;
}
文件的打开与关闭
在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
void open(const char* filename,int mode,int access);
- filename:要打开的文件名
- mode:要打开文件的方式
- access:打开文件的属性
打开文件的方式在类ios中定义,常用值如下:
- ios;;app 已追加的方式打开文件
- ios::ate 打开文件后定位到文件尾,ios::app就包含此属性
- ios::binary 以二进制的方式打开文件,默认的方式是文本方式
- ios::in 文件以输入方式打开(文件数据输入到内存)
- ios::out 文件以输出方式打开(内存数据输出到文件)
- ios::nocreate 不建立文件,所以文件不存在时打开失败
- ios::noreplace 不覆盖文件,所以文件存在时打开失败
- ios::trunc 如果文件存在,就把文件长度设为0
可以用“或”把以上属性连接起来,如 ios::out|ios::binary
打开文件的属性取值有以下几种:
- 0:普通文件,打开访问
- 1:只读文件
- 2:隐含文件
- 3:系统文件
文件关闭:
void close ();
文本文件用运算符(<<)向文件输出,用析取运算符(>>)从文件输入