c++文件操作

C++ 中Boost 文件操作 读取文件夹下的相应拓展名文件 通过CMakeList链接boost库的文件操作目录 find_package(Boost REQUIRED COMPONENTS system filesystem) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(tmp ${Boost_LIBRARIES}) main... 阅读详情

读 《C++ Primer Plus》第17章4-7节

在线文档:http://www.cplusplus.com/reference

 

一     头文件关系:

C++在头文件fstream(fstream.h)中定义了ifstream类和oftream类,以及用于I/O同步的fstream。这些类都是从头文件iostream中的类派生而来,iostream的基类是istream,ostream。对于大多数实现来说,包含fstream则自动包含iostream文件。ofstream的基类是ostream,iftream类的基类是istream。文件流类从ios_base类中继承了一个流状态成员以及报告流状态的方法。

二     创建读写流对象的方法:

1)  构造函数

                   1.              ifstream fin;      fin.open(“jar.dat”);     或者 ifstram fin(“jar.dat”);

                            ofstream同理

                            使用方法可同cin,cout.即cin>>name;cout<<name;

2.      文件模式的使用方法:

         ifstraem fin(“temp.txt”,mode);

         ofstream fout;

fout.open(“temp.txt”,mode);

2)   open函数

         在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:

  void yWXz(const char* filename,int mode,int access);
参数说明:   
  filename:  要打开的文件名
  mode:    要打开文件的方式
  access:   打开文件的属性
  打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:     

常量
 含义
 常量
 含义
 
ios_base::in
 打开文件,以便读取
 ios_base::app
 追加到文件尾
 
        out
               写入
         trun
 文件存在,则截短文件
 
        ate
         ,并移到文件尾
         binary
 二进制文件
 

ios::nocreate: 不建立文件,所以文件不存在时打开失败 

ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败

ios::trunc:  如果文件存在,把文件长度设为0

 

打开文件的属性取值是:   

  0:普通文件,打开访问

  1:只读文件

  2:隐含文件

  4:系统文件

  可以用“或”或者“+”把以上属性连接起来 ,如3或1|2就是以只读和隐含属性打开文件。   

  例如:以二进制输入方式打开文件c:/config.sys   

    fstream file1;

    file1.open("c://config.sys",ios::binary|ios::in,0);   

    如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:   

    file1.open("c://config.sys");<=>file1.open("c://config.sys",ios::in|ios::out,0);   

    另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:   

    fstream file1("c://config.sys");   

    特别提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。   

    ifstream file2("c://pdos.def");//以输入方式打开文件

    ofstream file3("c://x.123");//以输出方式打开文件

三     检查文件是否打开的方法:

a)      if(fin.fail());

b)      if(!fin.good());

c)      if(!fin)        //根据fin.good()来设置自己的bool值

d)      is_open() //能够检测到一不合适的文本模式打开文件时失败的错误和上述good()测到的各种错误

         fin.good();//正常读取文件时返回true

         fin.fail();/在文件到达结尾或者出现其他输入错误如内存不足时返回true

         fin.eof();//当文件到达结尾的返回true。

         fin.bad();//出现无法识别的故障(如硬盘故障)时返回true。

四     使用命令行参数的方法:

          int main(int argc,char* argv[]){…}    第一个参数为命令和参数个数的和,第二个参数为参数数组

          fin.clear()         将文件与ifstream对象关联起来时,自动重置状态。不一定要求,但是无害。

五     文件模式常量:

六     C++和C的文件打开模式

C++模式
 C模式
 含义
 
ios_base::in
 “r”
 打开一读取
 
ios_base::out
 “w”
 等价于ios_base::out|ios_base::trunk(有时可以省略)
 
out|trunc
 “w”
 打开一些如文件,如果存在,则截取文件
 
out|app
 “a”
 打开以写入,只追加
 
in|out
 “r+”
 打开以写入,在文件读取的位置写入
 
in|out|trunc
 “w+”
 打开以读写,如果存在,则首先截取文件
 
out|binary
 cmodeb
 以C++mode和二进制模式打开,例如ios_base::in|ios_base::binary成为“rb”
 
out|ate
 “cmode”
 以指定的模式打开,并已到文件尾。C则需要使用独立的函数调用。例如,ios_base::in|ios_base::ate则被转换为“r”和C函数调用fseek(file,0,SEEK_END);
 

对于app模式,只能追加,但是不能修改原来已经存在的数据,要是其能修改,则需要与out模式组合,即app|out。对于已经处理到末尾的文件,eof位将被被设置为1,因此,如果想对文件再作修改,则需要调用函数fout.clear()终止流状态,否则禁止对文件作进一步读写操作。

七     文件读写:

1)   操纵符 功能 输入/输出

dec 格式化为十进制数值数据 输入和输出
 
endl 输出一个换行符并刷新此流 输出
 
ends 输出一个空字符 输出
 
hex 格式化为十六进制数值数据 输入和输
 
出 oct 格式化为八进制数值数据 输入和输出
 
setpxecision(int p) 设置浮点数的精度位数 输出
 
 

         2)   基本方法

         ①put()

    put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。   

   ②get()

    get()函数比较灵活,有3种常用的重载形式:   

    一种就是和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。   

    另一种重载形式的原型是: int get();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。   

    还有一种形式的原型是:ifstream &get(char *buf,int num,char delim='/n');这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符'/n'。例如:   

    file2.get(str1,127,'A');//从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。   

  ③读写数据块(read, write)

    要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:

    read(unsigned char *buf,int num);

    write(const unsigned char *buf,int num);

      read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。   

  例:

      out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中

      in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换

八     随即读取文件的函数

         和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的形式如下:   

      istream &seekg(streamoff offset,seek_dir origin);

   ostream &seekp(streamoff offset,seek_dir origin);

    streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:   

  ios::beg:  文件开头

  ios::cur:  文件当前位置

  ios::end:  文件结尾

    这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。

  例:

       file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节

       file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字

代码展示

1)   覆盖操作:(tellp,seekp)

outfile.write ("This is an apple",16);pos=outfile.tellp();outfile.seekp (pos-7);outfile.write (" sam",4);输出:This is a sample

2)   读取整个文件到缓冲(seekg,tellg)

  int length;

  char * buffer;

  ifstream is;

  is.open ("test.txt", ios::binary );

 

  // get length of file:

  is.seekg (0, ios::end);

  length = is.tellg();

  is.seekg (0, ios::beg);

 

  // allocate memory:

  buffer = new char [length];

  is.read (buffer,length);

  is.close();

 

  cout.write (buffer,length);

 

  delete[] buffer;

九     文件操作结构体

         struct   DATA { 

       int   n; 

       char   a;  

  };

  ostream&   operator   <<(ostream&   os,   DATA&   data) {  
         os<<data.a;  
         os<<data.n;  
         return   os;  
  }  
  istream&   operator   >>(istream&   os,   DATA&   data) {  
         os>>data.a; 

         os>>data.n;  

         return   os;  

  }

十     使用临时文件(cstdio(stdio.h))

tmpname(pasName);生成生成与当前目录不重名的字符串存于pasName中,pasName的长度最多为L_tmpnam,最多生成TMP_NAM个不同的文件名。

 

基于STM32与HRTIM的四开关Buck-Boost双向DC-DC电源设计实战(附源码、仿真与设计解析) 本文详细介绍了基于STM32F334的HRTIM高分辨率定时器实现四开关Buck-Boost双向DC-DC电源的设计实战。通过精准的PWM控制、双环PID算法和智能模式切换逻辑,解决了电压震荡与效率优化等关键问题,并提供了完整的源码、PSIM仿真及参数计算,为高性能电源设计提供了实用参考。 阅读详情

相关推荐

RexUniNLU零样本通用自然语言理解:nlp_deberta_rex-uninlu_chinese-base模型实战解析

本文深入解析了RexUniNLU零样本通用自然语言理解模型(nlp_deberta_rex-uninlu_chinese-base)的实战应用。通过详细的环境配置、模型加载及实战案例,展示了该模型在零样本场景下的强大能力,如实体识别和复杂关系抽取,显著提升NLP任务效率。

weixin_29088655的博客 250

C++基础:文件读写

C++文件读写: 文件的使用步骤如下: 1.说明一个文件流对象,这又被称为内部文件: ifstream ifile;//只输入用 ofstream ofile;//只输出用 fstream iofile;//既输入又输出用  2.使用文件流对象的成员函数打开一个磁盘文件。这样在文件流对象和磁盘文件名之间建立联系。 文件流中说明了三个打开文件的成员函数。 v

互联网时代,属于我们的时代! 1429

第1章:Zephyr 开发环境搭建与 Hello World

📝【摘要】本文是Zephyr RTOS开发入门指南的第一章,详细介绍了从环境搭建到首个应用运行的完整流程。主要内容包括:1️⃣ Zephyr项目结构解析与west工具链部署;2️⃣ 开发环境配置(Linux/WSL)及SDK安装;3️⃣ 两种实践路径——官方HelloWorld样例与自定义应用开发;4️⃣ 实际硬件部署方法(nRF/STM32)及常用west命令速查;5️⃣ 典型问题解决方案。通过qemu_x86模拟器演示了基础打印功能实现,为后续深度开发奠定基础。

hemoparrot的专栏 1357

十四天学会C++之第八天:文件操作

十四天学会C++之第八天:文件操作

AI创变工坊,和1000万新个体创业者一起成长!愿大家都能跟上时代的洪流,不被社会淘汰,愿大家的生活工作收入都能具备竞争力! 599

DSP复习笔记(5)——外部接口模块XINTF

【注意】 1. 芯片型号:TMS320F28335 2. 适用于NJUSTEO李彧晟老师课程 3. 参考资料:《TMS320F28335 DSP原理、开发及应用》 4. 对应PPT第二章 5. 本章内容较多而且较为重要,请结合PPT一起复习

BerenCamlost的博客 1万+

基于深度学习的高精度牙齿健康检测识别系统(PyTorch+Pyside6+YOLOv5模型)

近年来,机器学习和深度学习取得了较大的发展,深度学习方法在检测精度和速度方面与传统方法相比表现出更良好的性能。YOLOv5是单阶段目标检测算法YOLO的第五代,根据实验得出结论,其在速度与准确性能方面都有了明显提升,开源的代码可见https://github.com/ultralytics/yolov5。因此本博文利用YOLOv5检测算法实现一种高精度家禽猪识别检测模型,再搭配上Pyside6库写出界面系统,完成目标检测识别页面的开发。

sc1434404661的博客 5799

C++文件读取的四种方式

第四种方法:利用ifs内部的get()函数一个个的将字符读出来,遇到EOF时返回False退出while循环,EOF 是 end of file的标志,不太建议使用这个,因为这个很慢,只能一个一个字符读取。局限性:由于“

m0_74756975的博客 3万+

RFSoC全面解析(八)—— ZCU111 RFSoC评估工具的上位机界面

下面的内容的参考文献为:XILINX公司文档UG1287。 XILINX公司提供了一个RFSoC的ADC/DAC性能的评估工具或者叫评估系统,这个文档就是讲如何使用这个评估工具的。 整个评估系统总的框图如上图所示,评估系统由上位机、ZCU111开发板、子卡以及网线、射频线缆组成。 ZCU111开发板内主要使用的RFSoC外设为时钟驱动和DDR4,RFSoC的PS部分和PL部分都使用了。 PS部分发挥的功能为通过网口与上位机通信,通过IIC总线控制时钟驱动芯片以及数据流控制等;PL部分发挥的功能为

4378

C++文件读取的四种情况

C++文件读取的四种情况

weixin_62210536的博客 2万+

节省人力成本40%!仓储物流AI机器人调度系统实战案例(含路径规划算法与系统架构图)

首先,我们需要定义一个Node类self.x = x # 节点x坐标self.y = y # 节点y坐标self.g = g # 从起点到当前节点的实际成本(g值)self.h = h # 从当前节点到终点的启发式成本(h值)self.f = g + h # 总成本(f值)self.parent = None # 父节点(用于回溯路径)self.task_id = task_id # 任务IDself.priority = priority # 任务优先级(1=最高,5=最低)

小程序开发 948

合肥工业大学嵌入式系统原理实验报告

GPKDAT 的6、7引脚设置低电平,设置GPKDAT = 0x30则34灯亮12灯灭,GPKDAT 的4、5、6、7引脚全为高电平,设置GPKDAT = 0xf0,则led灯全灭。注意在烧写时要连接主机后面的USB接口,烧写完成后,要关闭开发板电源,将S2拨动开关置于NAND位置,然后重新开启开发板电源, 则开发板运行刚刚烧入的裸机程序。实验修改要求:在延时不变的条件下,将原程序中四个LED全亮,然后全灭的显示状态,修改为“四个全亮,然后1和2亮(3和4灭),然后3和4亮(1和2灭),最后全灭”。

Martin-share的博客 3097

C++ 文件IO流

什么是文件IO流 首先需要包含文件IO操作流头文件fstream #include <fstream> //文件IO操作流头文件 fstream 文件的读取类ifstream 声明读取文件所需要的输入流类变量 并 建立流对象 使用ifstream类中的open成员函数 连接指定文件 关于open打开文件函数中的第二个参数 – 使用方式 ios::in -- 打开一个可读取文件 (以输入的方式打开文件) ios::out -- 打开一个可写入文件 (以输出的方式打开文件,如果已有此名字的

Chroniccandy的博客 709

基于 MATLAB 的 FastICA 算法实现语音信号盲分离

FastICA 算法通过最大化信号的非高斯性,找到独立成分,从而实现信号的分离。这些混合的信号被称为盲源信号,我们希望通过分析混合信号,将它们分离出来以便进行进一步的处理和分析。FastICA 是一种常用的盲源信号分离算法,它基于统计学原理,通过寻找独立成分来实现信号的分离。FastICA(独立成分分析)是一种常用的盲源信号分离算法,在语音和图像处理领域都有广泛的应用。本文将介绍如何使用 MATLAB 实现 FastICA 算法来实现语音信号的盲分离,并提供相应的源代码。FastICA 算法原理。

学习使你进步。 2024

c++文件操作大全

c++文件操作大全 基于C的文件操作   在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef struct {   int level;           /* fill/empty level of buffer */...

hbqjzx的专栏 7万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++文件操作

不要以文本模式打开二进制文件,也不要用行的方法操作二进制文件,可能会破坏二进制数据文件的格式,也没有必要。D:\study\编程\C语言\学习\文件操作\test.c。dir参数用于对文件流指针的定位操作上,代表搜索的起始位置。seekg:设置输入文件流的文件流指针位置。在程序运行结束后将不会被记录保存。存放在硬盘上的数据就是文件了。pos:新的文件流指针位置值。文件标识常被称为文件名。dir:搜索的起始位置。数据持久化的两种方式。off:需要偏移的值。

2303_80087291的博客 2081

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

70 CPP 文件操作

d)不要以文本模式打开二进制文件,也不要用行的方法操作二进制文件,可能会破坏二进制数据文件的格式,也没有必要。(因为二进制文件中的某字节的取值可能是换行符,但它的意义并不是换行,可能是整数n个字节中的某个字节)当输入流操作未能读取预期的字符时,将设置failbit(非致命错误,可挽回,一般是软件错误,例如:想读取一个整数,但内容是一个字符串;c++存储整数的时候,需要4字节的内存空间,并且4字节要作为一整体来安排,把下面长长的二进制存进去,如果把每个字节分开来看,分别是(从右往左)97,1,2,0。

wade1010的专栏 1050

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++文件操作之一 :基于C的文件操作

在编程的过程中,文件的操作是一个经常用到的问题,在C++中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++的文件操作;3、基于WINAPI的文件操作;4、基于BCB库的文件操作;5、特殊文件的操作。一、基于C的文件操作 A.  C语言继承下来的文件操作:  在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面

z2care的专栏 4201

【c++】文件操作

在文本模式下(即没有指定 std::ios::binary),std::ifstream 会对输入进行特殊处理,比如转换换行符(在Windows系统上,可能会将 \n 转换为 \r\n 或将 \r\n 转换为 \n)。在C++中,将文件流的位置指针移动到文件的任意位置可以通过std::fstream、std::ifstream或std::ofstream中的成员函数seekg()和seekp()来实现。截断模式( std::ios::trunc):在打开文件时,如果文件已经存在,则清空其内容。

weixin_53161762的博客 1094

C++文件操作函数

C++提供的文件操作功能强大且灵活,从基础的文件读写到复杂的文件系统操作,几乎可以满足所有需求。了解并掌握这些操作对每一个C++开发者都是必要的。希望本文能帮助大家入门C++中的文件操作,并在实际开发中加以应用。

程序猿老樊的博客 1383

C++ 文件操作

1 文本文件 1.1 写文件 1.1.1 写文件步骤 1.1.2 文件打开方式 1.2 读文件 1.2.1 读文件步骤 1.2.2 读取文件的四种方式 2 二进制文件 2.1 写文件 2.2 读文件

ChaoChao66666的博客 3459

C++——文件操作

在C++编程中,文件操作是一个重要的组成部分,它允许程序读取、写入和处理文件数据。为了执行文件操作,C++提供了一系列的类和函数,这些都包含在标准库的和头文件中。

头秃中。。。。。 1511

C++学习28、文件操作

在C++中,文件操作主要通过标准库实现。库提供了三个主要的类:ifstream用于输入(读取)文件,ofstream用于输出(写入)文件,fstream则同时支持输入和输出操作。这些类都是继承自std::iostream,因此可以使用标准I/O流操作函数和方法。

HopeTTHappyXGC的博客 1187

C++语言的文件操作

C++语言的文件操作提供了丰富的功能,可以方便地处理文本文件和二进制文件。掌握文件操作的技巧对于编写实际应用程序是非常重要的。通过适当使用输入输出流、异常处理和文件模式,开发者可以轻松实现复杂的文件操作需求。在实际应用中,应根据项目的需求选择合适的文件格式(文本或二进制)以及合适的文件操作方式。希望本文能够帮助读者更深入地理解和掌握C++语言的文件操作。

2401_90032167的博客 698

J文件操作.cpp

本文是一篇关于 C++ 文件操作的进阶指南,采用轻松诙谐的风格进行讲解。文章首先介绍了文件操作的基本概念和步骤,然后详细讲解了 fstream、ifstream 和 ofstream 的使用方法,包括如何进行文本文件和二进制文件的读写操作。通过多个示例,展示了文件指针定位和随机访问的技巧,并强调了异常处理的重要性。最后,通过一个综合实践案例——学生信息管理系统,帮助读者巩固所学知识。本文适合有一定 C++ 基础的开发者,旨在提升文件操作技能。

m0_66709139的博客 937
上一篇: 运算符重载
下一篇: IEEE浮点数表示法总结
cmdhack
博客等级 码龄19年 20粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值