C++文件操作

转载自:明天再见

原文链接:http://blog.youkuaiyun.com/mfcing/article/details/7332432


1、头文件介绍

#include <iostream>//标准输入输出流
#include <fstream>//派生自iostream,包括ifstream和ofstream

using namespace std;//都在名称空间std中,别忘了加上

2、打开文件

const char* fileName="1.txt";//要打开的文件名,可以使路径名,默认情况下是所建工程下

fstream类派生了两个类ifstream\ofstream

fstream f(fileName,参数二);

参数二有多种形式,这里只看主要用的几种:

ios_base::in//打开文件用于读

ios_base::out//打开文件用于写

ios_base::app//打开文件,用于追加(不覆盖原有文件,默认情况是覆盖)

ios_base::binary//以二进制方式打开文件,默认情况下是文本文件方式

例:

fstream i(fileName,ios_base::in|ios_base::out);//打开文件用于读写(既可读也可写)

ifstream in(fileName,ios_base::binary|ios_base::in);//以二进制方式打开文件用于读

ofstream out(fileName,ios_base::out|ios_base::app);//打开文件用于追加

3、由于派生自iostream,很多其他的方法和iostream一样

比如:seekg()\eof()\clear()……

4、一些文件操作的例子

读写二进制文件

#include <iostream>  
#include <fstream>  
#include <string>  
using namespace std;
struct plant
{
	char name[20];
	int age;
	char num[10];
};
int _tmain(int argc, _TCHAR* argv[])
{
	plant p;
	p.name[20] = (char)"yao";
	p.age = 21;
	p.num[10] = (char)"0950420011";
	ofstream pf("data.dat", ios_base::out | ios_base::app | ios_base::binary);
	pf.write((char*)&p, sizeof(p));
	pf.close();
	ifstream in("data.dat", ios_base::in | ios_base::binary);
	plant p1;
	in.read((char*)&p1, sizeof(p1));
	in.close();
	cout << p1.age << endl << p1.name << endl << p1.num << endl;
	return 0;
}


循环读取指定文件的指定行

#include <iostream>  
#include <fstream>  
#include <string>  
#include <sstream>  
#include <time.h>  
using namespace std;
const int MAX = 1024;
const int M = 40; 
//======自定义函数判断输入是否为数字=======///  
bool IsDigital(const string &str)
{
	//int flag=0;//字符串中数字的个数  
	if (str == "")
		return false;
	const char* p = str.c_str();
	int length = str.length();
	for (int i = 0; i<length; i++, p++)
	{
		if ((*p <= '0') || (*p >= '9'))
			return false;
	}
	return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
        char c;
	do
	{
		fstream f;
		cout << "请输入文件名称(注:先把你要打开的文件复制到本程序下,如:'file.txt')" << endl;
		int flag = 0;
		[cpp] view plaincopy
		do
		{
			string str;
			if (flag)
			{
				f.clear();
				cout << "输入文件不存在,请重新输入:" << endl;
			}
			cin >> str;
			const char* file = str.c_str();
			//string text="";  
			f.open(file, ios_base::in | ios_base::out | ios_base::binary);
			flag++;
		} while (!f.is_open());
		int lineCount = 1;//记录当前文件的总行数  
		int SumByte = 0;//记录文件的总大小  
		while (!f.eof())
		{
			char c;
			c = f.get();
			if (c == '\n')
			lineCount++;
			SumByte++;
		}
		f.clear();
		float kb;
		kb = (float)SumByte / 1024;
		cout << "当前文件的字节数是:" << SumByte << " Bit" << endl;
		cout << "当前文件的总大小是:" << kb << " KB" << endl;
		cout << "当前文件的总行数是: " << lineCount << endl;
		cout << "/*===================================================*/\n/*===================================================*/" << endl;
		int line;
		string str_line;
		cout << "\n接下来请输入你要读取文件的行数:\n";
		cin >> str_line;
		while (!IsDigital(str_line))
		{
			cout << "输入格式不正确,请重新输入:\n";
			cin >> str_line;
		}
		line = atoi(str_line.c_str());
		cout << "当前的line值 :" << line << endl;
		while ((line <= 0) || (line>lineCount))
		{
			cout << "输入数据有误(1--" << lineCount << "间),请重新输入:\n";
			cin >> line;
		}
		cout << "你选择了输出第" << line << "行" << endl;
		//line=cin.get();  
		//string strOut;//输出内容  
		cout << "/*===================================================*/\n/*===================================================*/" << endl;
		int count = 0;
		char ch;
		f.seekg(0);//指向文件开始位置  
		for (int i = 1; i<line; i++)
		{
			/*do
			{
			//f.read((char*)&ch,sizeof ch);
			ch=f.get();
			count++;
			}
			while(ch!='\n');*/
			while (f.read((char*)&ch, sizeof ch))
			{
				count++;
				if (ch == '\n')
					break;
			}
		}
		cout << "输出count的值:" << endl;
		cout << count << endl;
		f.seekg(count);//跳转到所选行数的开头  
		cout << "/*===================================================*/\n" << endl;
		cout << "\n接下来输出你所选择的行:\n";
		cout << "/*===================================================*/\n" << endl;
		char a;
		while (f.read((char*)&a, sizeof a))
		{
			cout << a;
			if (a == '\n')
				break;
		}
		cout << "" << endl;
		cout << "是否继续打开文件?是-选择y:否-按任意键结束(除y)" << endl;
		cin >> c;
	} while (c == 'y');
	// char p;  
	//cin>>p;  
	return 0;
}

复制文件

#include <iostream>  
#include <fstream>  
using namespace std;
const char* file1 = "1.txt";
const char* file2 = "2.txt";
//把文件1的内容写到文件2的末尾  
int _tmain(int argc, _TCHAR* argv[])
{
	ifstream in(file1);//默认方式打开文件1进行读  
	ofstream out(file2, ios_base::out | ios_base::app);//打开文件2进行写入(app为追加)  
	out << in.rdbuf();//将文件1的内容输入到文件2的流中  
	in.close();//关闭文件流  
	out.close();
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值