c文件流操作

文章目录

1、缓冲区



不管是输入还是输出,为了减少刷内存操作,一般都有一个缓冲区的,所以一般情况下都是先缓冲到缓冲区,
当缓冲区满的时候、文件关闭或者手动刷新的时候才会读写到终端
1.1输出函数区别
cout << flush:刷新缓冲区到终端(<<操作符具有调用函数指针的作用)== cout.flush()
cout<<endl:换行+刷新缓冲区到终端 == cout<<”n”<<flush
cout<<”n”:只有换行的作用,有缓冲区,至于什么时候刷新与操作系统有关,所以一般就使用cout<<endl;
printf:没有缓冲区,直接写到终端

2、读写文件



2.1如果文件不是以in的模式打开,那么就会在不存在的时候创建,如果是in的时候,读取,不存在创建也是空文件,
所以是没有意义的,所以不存在是不会创建的!
app如果是以这种模式打开文件的话,文件指针就是在文件末尾!
2.2、fstream
Ifstream | ofstream fs(file_name):这种是以默认方式(out)打开文件,因为其构造函数中调用了默认的open()函数
或者fs.open()无返回值 if failure the the failbit state flag is set for the stream
fs<< <<endl;(一定要加endl,否则只是写在缓冲区中)
2.3、stdio.h
FILE * file_fd;
File_fd = fopen();
fprintf(file_fd,format,data);关闭文件的时候刷新或者缓冲区满的时候
问题:串行
解决:写之后fseek(file_fd,0,SEEK_END)

3、刷新缓冲区的时机


  • endl
  • flush()
  • close()
  • 程序结束
  • 缓冲区满
  • 原本是输出缓冲区转换成输入缓冲区

    4、eof()和peek()区别



4.1.EOF()标志位定义在stdio.h中,#define EOF (-1)
所以EOF并不是文本中的一个结束符
不管是使用get()或者getc()的时候如果返回-1,就是到达文件末尾了
返回-1的场景有读取异常;到达文件末尾(已经读取的大小和文件大小比较)
当get(c)是最后一个字节的时候,此时可以读取到字符,所以不返回-1,但是再次读取的时候就返回-1了
4.2.peek()
源码中是通过sgetc()进行预读的,也就是说如果缓冲区的字符如果为空,就返回-1,在读取当前字符的情况下

5、流指针定位



seekg()设置文件指针到达指定位置
tellg()获取当前文件指针的位置

6、主要函数说明



6.1 fstream get()
返回值,返回这个字符在流中的地址
当没有字符的时候返回NULL(‘n’也算一个字符,正常的行末尾是有换行符的)
当读到最后一个字符的时候就设置了EOF标志位
6.2 fstream getline(buf, length,delmi)
默认分隔符是’n’
返回值和get()一样
读取length个字符或者遇到分隔符,或者文件末尾就返回
内部实现是使用getc(),所以和get()是一样的!

原文:大专栏  c文件流操作

原文地址:https://www.cnblogs.com/petewell/p/11601776.html

时间: 2024-10-07 15:04:29

c文件流操作的相关文章

java FileStream文件流操作

直接上代码,函数使用说明详见Java API文档 import java.io.*; public class StreamDemo { public static void main(String[] args) { File f=new File("F:\\workspace\\JavaPrj\\test.txt"); FileOutputStream out=null; try { out=new FileOutputStream(f); byte[] b=new String(

C++ 文件流操作必知必会

一.文件流操作 1.确定文件打开的模式.可以选的模式主要有: ios::in 为输入(读)而打开一个文件ios::out 为输出(写)而打开文件 ios::ate 初始位置:文件尾 ios::app 所有输出附加在文件末尾 ios::trunc 如果文件已存在则先删除该文件 ios::binary 二进制方式 2.默认情况下是以文本的方式写文件,并且会删除原本文件中的数据,即ios::trunc 3.判断文件是否正常打开.好的文件操作习惯是,每次打开一个文件后,在进行文件写之前要判断文件是否正常

delphi 基础之三 文件流操作

文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向.流不但可以处理文件,还可以处理动态内存.网络数据等多种数据形式.如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的. 一.Delphi中流的基本概念及函数声明 在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性

C语言中文件流操作基本函数总结

函数所在头文件:stdio.h 说明:前半部分主要为对各个文件流操作函数的例举,后半部分着重于 上机运行分析.文中部分引用自王桂林老师的C/C++课件. 1.FIELE *fopen(const char*filename,const char *mode) 以mode的方式,打开一个以filename(指针类型)命名的文件, 返回一个指向该文件缓冲区的指针,该指针是后续操作的句柄. 2.int fclose(FILE *stream) fclose()用来关闭先前用fopen()打开的文件.并

FrameWork:文件流操作

文件和流 绝对路径:E:\msd1508\Framework\Day05\Day05笔记.txt相对路径:从当前路径出发,到目的地的路径 假设当前路径是Day04 ..\Day05\Day05笔记.txt 网络路径 Using System.IO; File/FileSystemInfo 文件(文件操作方法) Directory/DirectoryInfo 目录(目录操作方法) DriveInfo 磁盘(磁盘操作方法) stream 流/抽象基类 FileStream 文件流/字节方法读写 St

C++中输入输出流及文件流操作笔记

1.流的控制 iomanip          在使用格式化I/O时应包含此头文件.    stdiostream   用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序 2.类继承关系 ios是抽象基类,由它派生出istream类和ostream类, iostream类支持输入输出操作,iostream类是从istream类和ostream类通过多重继承而派生的类 类ifstream继承了类istream,类ofstream继承了类ostream,类fstream继承了

unity使用文件流操作streamingassets下的文件

背景: 1.Unity第一次启动时将streamingassets下的首包资源拷贝到persistentDataPath目录下. 2.Unity-android平台上的的这种操作只能使用www去加载streamingassets下的文件,导致速度问题. 备注: 1.此方案需要您对安卓有一点点的了解. 解决方案: 1.在打包的时候,将streamingassets下的文件目录做一个记录,每一个打包进去的相对streamingassets路径下的文件都记录在一个files.txt里面,比如strea

Android(三)文件流操作读写

1.将字符串写入文件流中.使用的是getFilesDir().存到手机内存中. File file = new File(getFilesDir() + "/info.txt"); try { OutputStream out = new FileOutputStream(file); out.write(text.getBytes()); out.close(); } catch (Exception e) { // TODO Auto-generated catch block e

java文件与文件流操作总结

一:数据流的相关概念 数据流 在Java中把不同的数据源与程序之间的数据传输都抽象表述为"流"(stream),以实现相对统一和简单的输入/输出操作方式.传输中的数据就像流水一样,也称为数据流. 2 .I/O数据流的分类方式 数据流分为输入流和输出流两类.输入流只能读取不能写.而输出流只能写不能读.(这里站在程序的角度来确定出入方向,即将数据从程序外部传送到程序中谓之"输入"数据,将程序中的数据传送到外部谓之"输出"数据. ) 3.缓冲流(Buf