C++中的文件处理

转载自:黑凤梨の博客

文件处理

案例一(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 ();

文本文件用运算符(<<)向文件输出,用析取运算符(>>)从文件输入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值