•C中的文件读写-freopen

函数简介
  freopen 是被包含于 C标准库头文件 stdio.h 中的一个函数,用于重定向输入输出流。
  该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。

函数声明
*FILE freopen(const char* _FileName, const char* _Mode, FILE* _Stream );
_FileName:需要重定向的文件名或文件路径
_Mode:代表文件访问权限的字符串
"r" 表示 只读访问
"w" 表示 只写访问
"a" 表示 追加写入
_Stream:需要被重定向的文件流
stdin:表示输入重定向(从指定文件中读取数据到程序中)
stdout:表示输出重定向(将程序中输出的数据输入到指定文件中)
返回值:如果成功,则返回指向该输出流的文件指针,否则返回为NULL

测试输出重定向(写文件)
  新建一个项目,并命名文件夹名称

在该项目中创建一个  C++中的文件读写.cpp  文件,并添加如下代码:

写文件
步骤
创建流对象:ofstream ofs;
打开文件:ofs.open("文件名/文件路径",打开方式);
写数据:ofs << "写入的数据"; (将 cout 改为 ofs)
关闭文件:ofs.close();
文件打开方式
ios::out :为写文件而打开文件
ios::app :追加方式写文件

#include <iostream>
#include <cstdio>
#include <fstream>//包含头文件
void fileio2()
{
int x=6,i,n;
//freopen("I:\\2023\\C++\\20221122\\in.txt","r",stdin);
freopen("I:\\2023\\C++\\20221122\\out.txt","w",stdout);
for(i=0; i<x ; i++) //读取文件内所有数据,当无数据可读时退出循环
cout<<i<<" ";
cout<<endl;
cout<<"共有"<<i<<"个数据\n";
fclose(stdout);
}
void fileio3()
{
ofstream ofs;//创建流对象
//ofs.open("I:\\2023\\C++\\20221122\\out.txt", ios::out);//打开文件 内容被覆盖
ofs.open("I:\\2023\\C++\\20221122\\out.txt", ios::app);//打开文件 原文件的基础上向后追加内容
ofs << "测试向FILEC++.txt中写文件123" << endl;//写数据
ofs.close();//关闭文件
}

  

读文件
1 创建流对象: ifstream ifs;
2 打开文件: ifs.open("文件路径",打开方式);
3 判断文件是否打开成功: ifs.is_open() (成功打开返回 true,否则返回 false)
4 读数据: ifs >> 变量1 >> 变量2 >> ...; (类比 cin)
5 关闭文件: ifs.close();

void fileio4() 
{
string s1;
ifstream ifs;//创建流对象
ifs.open("I:\\2023\\C++\\20221122\\out.txt", ios::in);//打开文件
if (!ifs.is_open())//判断文件是否打开成功
{
cout << "文件打开失败" << endl;
return;
}
while (ifs.good()&&!ifs.eof())
{
ifs >>s1;
cout <<s1<<endl;
//s1="";
}
ifs.close();//关闭文件
}

 文本文件 Input1.txt  编码:ANSI码

20221201 张三 18

20221202 李四 19
20221203 王五 20

读取文本文件

void fileio5() 
{
ifstream ifs;//创建流对象
ifs.open("I:\\2023\\C++\\20221122\\Input1.txt", ios::in);//打开文件
int id;
string name;
int age;
if (!ifs.is_open())//判断文件是否打开成功
{
cout << "文件打开失败" << endl;
return;
}
cout << "编号\t姓名\t年龄" << endl;
while (ifs.good()&&!ifs.eof())
{
ifs >> id >> name >> age;//读数据,且 编号、姓名、年龄 要和文件中的数据保持一致
cout << id << "\t" << name << "\t" << age << endl;
}
ifs.close();//关闭文件
return;
}