C++文件的读写
•C中的文件读写-freopen
From https://www.cnblogs.com/hyacinthLJP/p/16059338.html
函数简介
  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; }
 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号