欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++文件输入输出语句

程序员文章站 2024-03-18 17:46:22
...

1、ASCII文件(参考谭浩强)

个人理解:用于整数和单个字符的输入输出,文件形式用.txt

仅写出必要语句:

#include<fstream>
#include<iostream>//有些编辑器不需要这一句
using namespace std;
int main(){
//从文件中读入
    ifstream infile("E:\\My C\\data\\test.txt",ios::in);
    int a[10];
    if(!infile){
	    cerr<<"open fail!";
	    exit(1);
    } 
    for(int i=1;i<=10;i++){
	    infile>>a[i];
	    //infile.get(a[i]); 
        cout<<a[i]<<endl;
    }
    infile.close();
    return 0;
}

//向文件中写入
    ofstream outfile("E:\\My C\\data\\test.txt",ios::out);
    char ch;
    outfile<<ch;
    //outfile.put(ch);
//循环语句,将文本内容全部读完
    ifstream infile("E:\\My C\\data\\test.txt",ios::in);
    char ch;
    while(infile.get(ch))
    //while(infile>>ch)

2 二进制文件

二进制文件输入输出更方便,但是我们打开txt文件是不能直接看的。以结构体为例:

(1)读取输出二进制文件所用函数代码示例: 


typedef struct student
{
	char name[20];
	int age;
}student;
//以上为结构体
student s1[3]{"Li",1,"Zhao",2,"Qian",3};

//写进文件中
ofstream outfile("E:\\My C\\data\\test1.txt",ios::binary);
 //报错语句同上,省略
for(int i=0;i<3;i++)
	outfile.write((char*)&s1[i],sizeof(s1[i]));
outfile.close();
//write函数的原型中,第一个参数是字符指针类型,而&s1[i]是一个结构体的地址,所以用(char*)强制转换成字符指针

//从文件中读取
ifstream infile("E:\\My C\\data\\test1.txt",ios::binary);
student s2[3];
for(int i=0;i<3;i++)
	infile.read((char*)&s2[i],sizeof(s2[i]));
// 同write
infile.close();

//读取,两种功能
fstream iofile("E:\\My C\\data\\test1.txt",ios::in|ios::out|ios::binary);

几个用来改变指针位置的函数

seekp,用于输出文件p即为(put)

seekg,用于输入文件g即为(get)

代码示例:

fstream iofile("E:\\My C\\data\\test1.txt",ios::in|ios::out|ios::binary);
iofile.seekg(2*sizeof(s2[0]),ios::beg);
//fstream得到是一个输入输出两用的对象,用seekp,seekg都可以,这句代码效果是:将指针定位到结构体数组中第三个元素的开头
//ios::beg文件开头
//ios::current当前位置
////ios::end文件末尾