C++文件操作

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

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 "stdafx.h"
#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 "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <time.h>
//#include "iomanip.h"
//const char* file="data.dat"
using namespace std;
const int MAX=1024;
const int M=40;
//#define 
//////======自定义函数判断输入是否为数字=======///////////
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;
	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 "stdafx.h"
#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;
}


C++文件操作就介绍到这里

C++——文件操作的讲解 我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。⼀般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。那为什么我们从键盘输⼊数据,向屏幕上输出数据,并没有打开流呢?那是因为C语言程序在启动的时候,1.stdin-标准输⼊流。 阅读详情

相关推荐

C++核心】文件操作详解

参数解释:字符指针buffer指向内存中一段存储空间。参数解释:字符指针buffer指向内存中一段存储空间。程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过。以二进制的方式对文件进行读写操作,打开方式要指定为。二进制方式写文件主要利用流对象调用成员函数write。二进制方式读文件主要利用流对象调用成员函数read。读文件与写文件步骤相似,但是读取方式相对于比较多。文件打开方式可以配合使用,利用|操作符。读数据:四种方式读取(如下面代码案例)C++中对文件操作需要包含头文件。

数据知道的博客 1万+

C++文件操作,超级详细

C++文件操作,超级详细

qq_46017342的博客 9771

C++ 中Boost 文件操作

读取文件夹下的相应拓展名文件 通过CMakeList链接boost库的文件操作目录 find_package(Boost REQUIRED COMPONENTS system filesystem) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(tmp ${Boost_LIBRARIES}) main...

春江水暖鸭先知 1058

C++——文件操作

C++中输入输出是通过流对象进行操作,对于文件来说写文件就是将内容从程序输出到文件,需要用到写文件流ofstream;而读文件就是将内容从文件输入到程序,需要用到读文件流ifstream;这两个文件流类都包含在头文件中,对文件操作需要包含。

qq_42106610的博客 9700

C++文件操作详解

打开文件所在的文件夹即可发现一个新文件。以二进制的方式写入,所以会有乱码存在。

2301_79431343的博客 3664

c++文件操作大全

c++文件操作大全 基于C的文件操作   在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILEFILE在stdio.h中定义如下: typedef struct {   int level;           /* fill/empty level of buffer */...

hbqjzx的专栏 7万+

70 CPP 文件操作

d)不要以文本模式打开二进制文件,也不要用行的方法操作二进制文件,可能会破坏二进制数据文件的格式,也没有必要。(因为二进制文件中的某字节的取值可能是换行符,但它的意义并不是换行,可能是整数n个字节中的某个字节)当输入流操作未能读取预期的字符时,将设置failbit(非致命错误,可挽回,一般是软件错误,例如:想读取一个整数,但内容是一个字符串;c++存储整数的时候,需要4字节的内存空间,并且4字节要作为一整体来安排,把下面长长的二进制存进去,如果把每个字节分开来看,分别是(从右往左)97,1,2,0。

wade1010的专栏 1047

C++文件操作之一 :基于C的文件操作

在编程的过程中,文件的操作是一个经常用到的问题,在C++中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++文件操作;3、基于WINAPI的文件操作;4、基于BCB库的文件操作;5、特殊文件的操作。一、基于C的文件操作 A.  C语言继承下来的文件操作:  在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面

z2care的专栏 4196

c++文件操作

在文本模式下(即没有指定 std::ios::binary),std::ifstream 会对输入进行特殊处理,比如转换换行符(在Windows系统上,可能会将 \n 转换为 \r\n 或将 \r\n 转换为 \n)。在C++中,将文件流的位置指针移动到文件的任意位置可以通过std::fstream、std::ifstream或std::ofstream中的成员函数seekg()和seekp()来实现。截断模式( std::ios::trunc):在打开文件时,如果文件已经存在,则清空其内容。

weixin_53161762的博客 1090

C++文件操作函数

C++提供的文件操作功能强大且灵活,从基础的文件读写到复杂的文件系统操作,几乎可以满足所有需求。了解并掌握这些操作对每一个C++开发者都是必要的。希望本文能帮助大家入门C++中的文件操作,并在实际开发中加以应用。

程序猿老樊的博客 1380

C++ 文件操作

1 文本文件 1.1 写文件 1.1.1 写文件步骤 1.1.2 文件打开方式 1.2 读文件 1.2.1 读文件步骤 1.2.2 读取文件的四种方式 2 二进制文件 2.1 写文件 2.2 读文件

ChaoChao66666的博客 3436

c++文件操作

对于输入输出流解释:在C++中,输入输出是同流来完成的。输出操作将一个对象的状态转换成一个字符序列,输出到某个地方。输入操作也是从某个地方接收到一个字符序列,然后将其转换成一个对象的状态所要求的格式。这整个操作就像数据在流动,因此我们把接收输出数据的地方叫目标,把输入数据的来源称作源。因此我们可以把输入和输出操作看成字符序列在源、目标以及对象之间的流动。❀。

2301_79328557的博客 3398

C++学习28、文件操作

C++中,文件操作主要通过标准库实现。库提供了三个主要的类:ifstream用于输入(读取)文件,ofstream用于输出(写入)文件,fstream则同时支持输入和输出操作。这些类都是继承自std::iostream,因此可以使用标准I/O流操作函数和方法。

HopeTTHappyXGC的博客 1181

C++语言的文件操作

C++语言的文件操作提供了丰富的功能,可以方便地处理文本文件和二进制文件。掌握文件操作的技巧对于编写实际应用程序是非常重要的。通过适当使用输入输出流、异常处理和文件模式,开发者可以轻松实现复杂的文件操作需求。在实际应用中,应根据项目的需求选择合适的文件格式(文本或二进制)以及合适的文件操作方式。希望本文能够帮助读者更深入地理解和掌握C++语言的文件操作

2401_90032167的博客 693

J文件操作.cpp

本文是一篇关于 C++ 文件操作的进阶指南,采用轻松诙谐的风格进行讲解。文章首先介绍了文件操作的基本概念和步骤,然后详细讲解了 fstream、ifstream 和 ofstream 的使用方法,包括如何进行文本文件和二进制文件的读写操作。通过多个示例,展示了文件指针定位和随机访问的技巧,并强调了异常处理的重要性。最后,通过一个综合实践案例——学生信息管理系统,帮助读者巩固所学知识。本文适合有一定 C++ 基础的开发者,旨在提升文件操作技能。

m0_66709139的博客 932
上一篇: C++实现:BF算法和KMP算法
下一篇: GDI+基础编程(1)
疯狂-的-蜗牛
博客等级 码龄16年 427粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值