【C/C++】文件读写

C语言:

1.二进制文件写

#include<stdio.h>
void main()
{
	int ar[10] = {12,23,34,45,56,67,78,89,90,100};
	FILE *fp = NULL;                                  //文件指针
	fp = fopen("Text2.txt","w");                      //打开文件
	while(!fp)                                        //打开失败
	{
		cout<<"Open File Fail!"<<endl;
		return;
	}
	fwrite(ar,sizeof(int),10,fp);                    //写入二进制文件
	fclose(fp);                                      //关闭
}

2.二进制文件读

<span style="font-size:18px;">#include<stdio.h>
void main()
{
	int ar[10];
	FILE *fp = NULL;                                //文件指针
	fp = fopen("Text2.txt","r");                    //打开文件
	while(!fp)                                      //打开失败
	{
		cout<<"Open File Fail!"<<endl;
		return;
	}
	fread(ar,sizeof(int),10,fp);                    //二进制读取文件
	fclose(fp);                                     //关闭
}</span>

3.文件写

<span style="font-size:18px;">#include<stdio.h>
void main()
{
	int ar[10] = {12,23,34,45,56,67,78,89,90,100};
	FILE *fp = NULL;                                //文件指针
	fp = fopen("Text3.txt","w");                    //打开文件
	while(!fp)                                      //打开失败
	{
		cout<<"Open File Fail!"<<endl;
		return;
	}
	for(int i = 0;i < 10;++i)                       //写入数据
	{
		fprintf(fp,"%5d",ar[i]);
	}
	fclose(fp);                                     //关闭文件
}
</span>

4.文件读

<span style="font-size:18px;">#include<stdio.h>
void main()
{
	int ar[10];
	FILE *fp = NULL;                              //文件指针
	fp = fopen("Text3.txt","r");                  //打开文件
	while(!fp)                                    //打开失败
	{
		cout<<"Open File Fail!"<<endl;
		return;
	}
	for(int i = 0;i < 10;++i)                     //读出数据
	{
		fscanf(fp,"%d",&ar[i]);
	}
	fclose(fp);                                   //关闭
}</span>

C++:

C++在类ios中提供格式化输入输出。这些格式是对所有文本方式的输入输出流均适用。格式控制符定义为公有的无名的枚举类型:

enum{ skipws=0x0001,
//跳过输入中的空白字符

left=0x0002, //输出左对齐

right=0x0004, //输出右对齐

internal=0x0008, //在输出符号或数制字符后填充

dec=0x0010, //在输入输出时将数据按十进制处理

oct=0x0020, //在输入输出时将数据按八进制处理

hex=0x0040, //在输入输出时将数据按十六进制处理

showbase=0x0080, //在输出时带有表示数制基的字符

showpoint=0x0100, //输出浮点数时,必定带小数点

uppercase=0x0200,
//输出十六进制,用大写

showpos=0x0400, //输出正数时,加”+”号

scientific=0x0800, //科学数方式输出浮点数

fixed=0x1000, //定点数方式输出实数

unitbuf=0x2000, //插入后,立即刷新流

stdio=0x4000} //插入后,立即刷新stdout和stderr

该枚举量说明中每一个枚举量实际对应两字节数据(16位)中的一个位,所以可以同时采用几个格式控制,只要把对应位置1即可,这样既方便又节约内存。取多种控制时,用或“|”运算符来合成,合成为一个长整型数,在ios中为:

protected:

long x_flags;

类ios中还设置了三个输入输出流格式控制标志:

protected:

int x_precision; //标志浮点数精度,缺省为6位

int x_width; //输出域宽,缺省域宽为0,

//重设域宽只对其后第一输出项有效,如域宽不足,则不受限制

char x_fill; //标志域宽有富余时填入的字符

标准设备输入是最不安全的,注意以下几点,可以避免错误:

1.  cin为缓冲流。键盘输入的数据保存在缓冲区中,当要提取时,是从缓冲区中拿。如果一次输入过多,会留在那儿慢慢用,如果输入错了,必须在回车之前修改,如果回车键按下就无法挽回了。只有把输入缓冲区中的数据取完后,才要求输入新的数据。不可能用刷新来清除缓冲区,所以不能输错,也不能多输!

2.  输入的数据类型必须与要提取的数据类型一致,否则出错。出错只是在流的状态字state(枚举类型io_state)中对应位置位(置1),程序继续。所以要提高健壮性,就必须在编程中加入对状态字state的判断。

3.  空格和回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输入。但如果是字符型和字符串,则空格(ASCII码为32)无法用cin输入,字符串中也不能有空格。回车符也无法读入。

文件的打开与关闭

文件的使用步骤如下:

1.说明一个文件流对象,这又被称为内部文件:

ifstream ifile;//只输入用

ofstream ofile;//只输出用

fstream iofile;//既输入又输出用

2.使用文件流对象的成员函数打开一个磁盘文件。这样在文件流对象和磁盘文件名之间建立联系。文件流中说明了三个打开文件的成员函数。

void ifstream::open(const char*,int =ios::in,

int=filebuf::openprot);

void ofstream::open(const char *,int=ios::out,

int=filebuf::opernprot);

void fstream::open(const char*,int,

int=filebuf::openprot);

第一个参数为要打开的磁盘文件名。第二个参数为打开方式,有输入(in),输出(out)等,打开方式在ios基类中定义为枚举类型。第三个参数为指定打开文件的保护方式,一般取缺省。所以第二步可如下进行:

iofile.open(“myfile.txt”,ios::in|ios::out);

三个文件流类都重载了一个带缺省参数的构造函数,功能与open函数一样:

ifstream::ifstream(const char*,int=ios::in,int=filebuf::openprot);

ofstream::ofstream(const char*,int=ios::out,

int=filebuf::openprot);

fstream::fstream(const char*,int,

int=filebuf::operprot);

所以1,2两步可合成:

fstream iofile(“myfile.txt”,ios::in|ios::out);

打开文件也应该判断是否成功,若成功,文件流对象值为非零值,不成功为0(NULL),文件流对象值物理上就是指它的地址。

因此打开一个文件完整的程序为:

fstream iofile(”myfile.txt”,ios::in|ios::out);

if(!iofile){

cout<<”不能打开文件:”<<”myfile,txt”<<endl;

exit(1); } //失败退回操作系统

3.使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写,这在下一节中讨论。

4.关闭文件。三个文件流类各有一个关闭文件的成员函数

void ifstream::close();

void ofstream::close();

void fstream::close();

使用很方便,如:

iofile.close();

关闭文件时,系统把该文件相关联的文件缓冲区中的数据写到文件中,保证文件的完整,收回与该文件相关的内存空间,可供再分配,把磁盘文件名与文件流对象之间的关联断开,可防止误操作修改了磁盘文件。如又要对文件操作必须重新打开。

关闭文件并没有取消文件流对象,该文件流对象又可与其他磁盘文件建立联系。文件流对象在程序结束时,或它的生命期结束时,由析构函数撤消。它同时释放内部分配的预留缓冲区。

文件打开方式是在ios类中定义的,公有枚举成员:

enum open_mode{

in=0x01, //打开文件用于输入操作(从文件读取),文件指针在文件头

out=0x02, /*打开文件用于写入文件。如文件不存在,则建立,但指定目

录必须存在,否则建立文件失败。如文件存在,未同时设

app,ate,in则文件清空*/

ate=0x04,

//打开文件用于输入/输出,文件指针在文件尾,但新数据可写到任何位置

app=0x08, //打开文件用于输出,但从尾部添加,新数据只能添加在尾部

trunce=0x10, //打开文件,并清空它,以建立新文件

nocreate=0x20, //如文件存在则打开,不存在并不创建新文件

noreplace=0x40,

//如文件不存在则创建,如文件存在则只能设为ate及app方式

binary=0x80 }; //以二进制方式打开文件使用方法与格式控制符相同

1.文件写

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
	int ar[10] = {12,23,34,45,56,67,78,89,90,100};     //给定写入文件的内容
	ofstream ofile;                                    //文件输出流
	ofile.open("Text1.txt",ios::out);                  //打开文件
	while(!ofile)                                      //打开错误
	{
		cout<<"Open File Fail!"<<endl;
		return;
	}
	for(int i = 0;i < 10;++i)                          //打开
	{
		ofile<<ar[i]<<" ";
	}
	ofile.close();                                     //关闭文件
}

2.文件读

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
	int ar[10];
	ifstream ifile;                                  //文件输入流
	ifile.open("Text1.txt",ios::in);                 //打开文件
	while(!ifile)                                    //打开失败
	{
		cout<<"Open File Fail!"<<endl;
		return;
	}
	for(int i = 0;i < 10;++i)                        //读取文件
	{
		ifile>>ar[i];
	}
	ifile.close();                                   //关闭文件
}

3.复制文件

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
	ifstream sfile("E:\\VC++\\Text1.c");
	ofstream dfile("E:\\t.c");                //只能创建文件,不能建立子目录,如路径不存在则失败
	char ch;
	if(!sfile)
	{
		cout<<"Open Source File Fail!"<<endl;
		return;
	}
	if(!dfile)
	{
		cout<<"Open Target File Fail!"<<endl;
		return;
	}
	sfile.unsetf(ios::skipws);          //关键!把跳过空白控制位置0,即不跳过空白,否则空白全未拷贝
	while(sfile>>ch)
	{
		dfile<<ch;
	}
	sfile.close();                      //如没有这两个关闭函数,析构函数也可关闭
	dfile.close();
}

4.按行复制文本文件

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
	char filename[256],buf[100];
	fstream sfile,dfile;
	cout<<"输入源文件的路径名:"<<endl;
	cin>>filename;
	sfile.open(filename,ios::in);                  //打开一个已存在的文件
	while(!sfile)
	{
		cout<<"原文件找不到,请重新输入路径名:"<<endl;
		cin>>filename;
		sfile.open(filename,ios::in);
	}
	cout<<"输入目标文件路径名:"<<endl;
	cin>>filename;                                 //只能创建文件,不能建立子目录,如路径不存在则失败
	dfile.open(filename,ios::out);
	if(!dfile)
	{
		cout<<"目标文件创建失败"<<endl;
		return;
	}
	while(sfile.getline(buf,100))//按行拷贝
	{
		if(sfile.gcount()<100)//因回车符未送到
		{
			dfile<<buf<<'\n';
		}
		else//本行大于99个字符,还未读到回车换行符,所以不加'\n'
		{
			dfile<<buf;
		}
	}
	sfile.close();
	dfile.close();

}

请大家指出不足的地方~谢谢,我会努力改正的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-23 23:07:12

【C/C++】文件读写的相关文章

Node.JS 文件读写,把Sheet图集转换为龙骨动画图集

Node.JS 文件读写,把Sheet图集数据转换为龙骨动画图集数据 var fs = require("fs") var readline = require("readline"); var rl = readline.createInterface({ input:process.stdin, output:process.stdout }); var path = undefined; var dbName = undefined; rl.question(

Android中的文件读写全面总结

转载请注明出处:http://blog.csdn.net/bettarwang/article/details/41625187 在深入分析Java中的I/O类的特征及适用场合 一文中,我详细介绍了Java中的I/O,但是,如果以为Android中的I/O与Java中一样,那就大错特错了.实际上,它们有一定的相同之外,但更多的是区别,因为Android系统中的文件存放位置不同,读取方式也不一样.下面将详细介绍Android中的文件读写: 一.资源文件的读取,不需要在Manifest文件中添加权限

文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

 1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; //通过ofstream的方式实现写入文件 open,close void main() { ofstream fout;  //ofstream输出文件 fout.open("E:\\1.txt");//打开文件 fout << "1234abcdef";

C语言文件读写操作总结

C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了.当使用打开函数时,必须给出文件名.文件操作方式(读.写或读写),如果该文件名不存在,就意味着建立(只对写文件而言,对读文件则出错),并将文件指针指向文件开头.若已有一个同名文件存在,则删除该文件,若无同名文件,则建立该文件,并将文件指针指向文件开头. fopen(char

快速入门Python中文件读写IO是如何来操作外部数据的?

读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件). 读文件 要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符 >>> f =

Python IO编程——文件读写

1.1   文件读写 1.1.1   读文件 >>> f = open('/root/python/hello.py','r')    #标识符r表示读 >>> f =open('/root/python/hello1.py', 'r')   #文件不存在报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> FileNotFoundE

RandomAccessFile 文件读写中文乱码解决方案!

RandomAccessFile 读写文件时,不管文件中保存的数据编码格式是什么   使用 RandomAccessFile对象方法的 readLine() 都会将编码格式转换成 ISO-8859-1 所以 输出显示是还要在进行一次转码 例子: package fileReadAndWrite; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; /*

转载-Python学习笔记之文件读写

Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件读写,也需要注意编码问题:其他文件的读写及编码相关详见专题的博文. open()   close()     with open(...) as ... 看以下示例就能了解 Python 的 open() 及 close() 函数.这边调用 read()方法可以一次读取文件的全部内容,Python把

iOS-Senior1-数据处理(文件读写)

1.Model的数据层的理解       1.1沙盒基础 沙盒定义:每个iOS应用程序都会为自己创建一个文件系统目录(文件夹),这个独立,封闭,安全的空间,叫做沙盒. 沙盒特点: 沙盒的文件夹及各个文件夹的作用   查找沙盒的两个方式: 1.点击finder -> 前往(左上角)- > 按住alt键  -> 资源库 -> Developer -> CoreSimulator -> (目标文件夹) 2.搜索 -> 终端 -> 命令行: 显示:defaults

第一个文件读写的例子

首先,我们打开VS2013,新建一个窗体应用程序如图: 需求:我们要实现这样的功能,点击文本框,然后弹出文件对话框,让我们选择文件,然后点击确定之后,读取指定文件的内容,随后我们将读取到的数据,写入文本中. 文件读写原理:前面,我们在学习文件读写原理的时候,已经知道,硬盘的数据和内存之间的关系,在磁盘中,我们将数据读取成二进制的数据,存放到byte数组中,然后在内存中,我们需要将byte数组转化为原始的文本数据. 然后看下截图的代码: 我们通过OpenFileDialog类,来创建一个对话框.通