【C++】关于文件输入输出

大佬的教程

C++文件读写详解(ofstream,ifstream,fstream)
各种ios::xxx组合在C++文件输入输出中的区别

注意的点

1.fstream对象中seek与tell方法的问题

因为fstream是ofstream与ifstream的派生类,继承了seekg、seekp、tellg、tellp方法。但是在fstream对象中,seekg&seekp tellg&tellp起到的效果是相同的。

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
	fstream fio("file.txt");
	fio.seekg(1);
	fio.seekp(2);
	cout << fio.tellg() << endl;
	cout << fio.tellp() << endl;
    return 0;
}
/********************************
输出结果:
2
2
*********************************/

2.关于ios::app与“seek”方法

ios::app方式使所有的输出附加在文件的结尾,seekg或者是seekp方法是无法改变输出位置的
比如说我们有个txt文件(file.txt)的内容是000456,我们想先用ios::app方式指向文件结尾,然后再用seekp方法修改指针位置为开头,将000替换为123,文本最终变成123456,我们来实现一下:

修改前的文本:

000456
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
	fstream fio("file.txt",ios::app|ios::out);//ios::app方式打开
	fio.seekp(0,ios::beg);//似乎指向了文件开头
	fio << "123";//用123替换000
    return 0;
}

修改后的文本:

000456123

可以看到,所有的输出都始终附加在文件的结尾
要用正确的方式输出我们想要的结果,全面的教程↓
各种ios::xxx组合在C++文件输入输出中的区别

3.fstream对象使用open方法自动创建文件的问题

在这里用构造的方式来调用open方法
注意fstream默认的方式是ios::in|ios::out,所以第一串与第二串代码等同。
源代码:

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
	fstream fio0("file0.txt");//一
	fstream fio1("file1.txt",ios::in|ios::out);//二
	fstream fio2("file2.txt",ios::out);//三
    return 0;
}

运行之前当前文件夹的状态:
在这里插入图片描述
运行之后:
在这里插入图片描述

若包含ios::in,则不会自动创建文件

发布了38 篇原创文章 · 获赞 4 · 访问量 1641

猜你喜欢

转载自blog.csdn.net/qq_15989473/article/details/103387743