C语言怎样对文件进行操作

人气:107 ℃/2023-07-28 01:11:24

我们运用C语言编写程序的时候,经常需要对文件进行操作。那么该如何实现呢?下面小编给大家分享一下。

工具/材料

Sunlime Text

操作方法

打开SublimeText软件,新建一个C语言文件,然后导入C语言库,如下图所示

接下来新建C语言的main函数,对文件的操作都会在main函数中进行,如下图所示

接下来调用C语言的fopen函数对文件进行打开操作,如下图所示

当打开文件以后就可以通过fgetc函数读取文件里面的内容,如下图所示

c语言文件读写操作

C/C 基础:各种文件读写方法,看完不再困惑(end)-最全版

上篇分享了用C语言的方式读写文件,这篇继续分享C 的方式去读写文件,看完这两篇后我相信读写文件再也不会困扰你了。

C 读写文件都是通过ifstream和ofstream以及fstream类实现,fstream包含读与写的功能,ifstream的i就是in的意思,就是读取的实现类,ofstream的o就是out的意思,是写的实现类。他们的具体关系如图:

下面看下具体的方法:

1、fstream类别实现

首先需要引用一个fstream对象,fstream fs ;fstream 类的open()函数可以打开文件,但是之前讲了fstream包含读与写的实现,所以在打开的时候就需要进行区分。我么看一下open(const char* filename,int mode,int access)函数的参数:

filename: 要打开的文件名

mode: 要打开文件的方式

access: 打开文件的属性

打开文件的方式在类ios中定义,其主要是用来描述你需要的打开文件的方式,比如你要读就是ios::in,要写就是ios::out,要追加就是ios::app,这三个是用的最多的,其他的大家可以去网上查一下,另外,这个参数是可以用"|"或者" "号进行多个连接的,比如以二进制方式读就是:ios::in|ios::binary。

打开文件的属性取值是:0:普通文件,打开访问1:只读文件2:隐含文件4:系统文件,不过这个参数我们一般不用去管它。

1.1 文本文件读写

fstream fs;

fs.open("test.txt",ios::in);; 后面两个参数可以不给,系统会给他默认参数。

1、这里读写文本文件的方式十分简单,直接用输入/输出流>>和<<就可以了

所以读文件

fstream fs;fs.open("test.txt",ios::in);if(fs.is_open()){ string str("") ; fs>>str ; fs.close();}

写文件

fstream fs;fs.open("newtest.txt",ios::out);if(fs.is_open()){ string str("i love u cpp") ; fs<<str ; fs.close();}

2、这里还有第二种写法,就是对应C语言的get/put函数,具体用法其实就跟C语言的那两对函数差不多,只不过换成了C 的写法,这里要提的一下就是C 判断文件结尾有一个eof()函数,是结尾就返回true,否则返回false;

fstream fs; fstream fsout; fs.open("test.txt",ios::in); fsout.open("newtest.txt",ios::out); if(fs.is_open()&& fsout.is_open()) { while (!fs.eof()) { char s = fs.get(); cout<<s; fsout.put(s); } fs.close(); fsout.close(); }

3、另外还有一个就是getline函数

这个函数顾名思义就是一行一行的读,但是有个问题是他读取出来的字符串会被它将后面的换行符号给处理掉,需要注意:

fstream fs; fs.open("test.txt",ios::in); char* s = new char[100] ; if(fs.is_open()) { while (!fs.eof()) { fs.getline(s,100); cout<<s; } } fs.close();

不过这个函数有两个问题就是除了上面讲的换行符的问题,还有一个很闹心的就是char* s = new char[100] ;这个数组定义长度一定要比一行的长度大,不然就会有问题,不信的大家可以把100改成2试一下就知道了。所以在用这个函数的时候大家多注意。

c 的读写方式比之C已经简单很多了,好用很多。下面我们看一下二进制文件怎么读写:

1.2 二进制文件用fstream提供的read和write两个函数

read(unsigned char *buf,int num);

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

这两个函数很好理解:buf就是要读入/写入的缓存,num就是一次读取/写入的量;

fstream fs; fstream fsout ; fs.open("test.jpg",ios::in|iostream::binary); fsout.open("newtest.jpg",ios::out|iostream::binary); char* s = new char[100] ; if(fs.is_open()&& fsout.is_open()) { cout<<"ok"; while (!fs.eof()) { fs.read(s,100); fsout.write(s,100); } } fs.close(); fsout.close();2、ifstream和ofstream读写文件

从上面的继承关系我们知道,ifstream和ofstream大部分方法可以跟fstream通用或者用法差不多。这里就不讲了。

有几点需要注意:1、读入和写是分开的,ifstream负责读入,ofstream负责写,在打开文件的时候ios::in和ios::out不能乱给,并且get()和put函数也分别是对应ifstream和ofstream对象。

文件位置指针C 版

C 对文件位置指针也进行了自己的封装,并且在不同seek分为(seekg() 和 seekp():g代表读指针,p代表写指针),tell(tellg() 和 tellp())也一样。另外位置信息定位C 也在ios中进行了封装:

ios::end;文件尾

ios::cur;当前位置

ios::beg;文件头

看完这两篇文章,我想读写文件对你来说再也不是难事了吧!大家觉得有用的帮忙给个关注吧!!!

推荐

首页/电脑版/网名
© 2025 NiBaKu.Com All Rights Reserved.