c++ 中如何读取文件 并使用文件中的数据

c++ 中如何读取文件 并使用文件中的数据,第1张

1、在电脑上新建一个文件夹,名称叫txt2array。然后,打开我们的devc++,新建一个控制台c++项目,名称也叫txt2array。

2、将项目文件及源代码文件以及我们演示用的数据文件都存放在txt2array文件夹中。

3、向数据文件中写入一些演示用数据。

4、标准库的输入输出类的关系。

5、第一个 *** 作读文件,我们可以使用ifstream或者fstream,前者提供了读取 *** 作,后者可以同时进行读写。

6、字符串类型转整型的类,主要是istringstream类。

fwrite执行后文件指针会自动偏移, 偏移量等于你写入的字节数。

作为2进制打开的文件,偏移量计算是精确的。作为文本文件打开,不一定精确(例如ftell)。

最好用 fgetpos,fsetpos 等自己控制。

#include <stdioh>

int main(void)

{

float a, b, c;

FILE f = fopen("codedata", "r");

while(!feof(f)) {

fscanf(f, "%f %f %f", &a, &b, &c);

printf("%f %f %f\n", a, b, c);

}

fclose(f);

return 0;

}

c语言文件类型指针是通过file

fp;

这种形式进行定义的。

关于file结构在vc6中有如下定义:

#ifndef _file_defined

struct _iobuf {

char _ptr; //文件输入的下一个位置

int _cnt; //当前缓冲区的相对位置

char _base; //指基础位置(即是文件的起始位置)

int _flag; //文件标志

int _file; //文件描述符id

int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取

int _bufsiz; //文件缓冲区大小

char _tmpfname; //临时文件名

};

typedef struct _iobuf file;

#define _file_defined

#endifc程序用不同的file结构管理每个文件。程序员可以使用文件,但是不需要知道file结构的细节。实际上,file结构是间接地 *** 作系统的文件控制块(fcb)来实现对文件的 *** 作的,如下图:

上面图中的_file实际上是一个描述符,作为进入打开文件表索引的整数。

文件是存放在物理磁盘上的,包括文件控制块(fcb)和数据块。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息。数据块用来存储实际的内容。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据。

相关函数:

file

fopen(

char

file,

char

open_mode

);

//打开文件,读文件到内存,返回文件信息结构指针

int

fread(

char

s,

int

size,

int

num,

file

fp

);

//按字节读取文件内容到s中

int

fwrite(

char

s,

int

size,

int

num,

file

fp

);

//按字节将s地址中的数据写到文件中

char

fgets(

char

s,

int

max_size,

file

fp);

//读一行数据到缓冲区s中

int fseek(

file

fp,

long

offset,

int

whence);

//移动文件指针到指定位置

void

rewind(file

fp);

//回到文件头

long

ftell(file

fp);

//得到当前文件偏移位置

fclose(fp);

//关闭文件,刷新缓存到物理磁盘上

fstream streamObject("exampletxt");//首先定义一个流对象,并指定一个文件连接:

//然后是控制指针,也就是楼主你想要的答案,

//一般是使用seekg函数来控制文件的指针:

//打开后默认是指向文件开头

//因此打开后有没有下面这句代码是一样的,下面的代码表示指向文件开头

streamObjectseekg(ios::beg);//指向开头(和streamObjectseekg(0,ios::beg)效果是一样的)

streamObjectseekg(ios::end);//指向末尾:

streamObjectseekg(10,ios::cur); //让文件指针从当前位置向文件末方向移动10个字节

streamObjectseekg(-10,ios::cur); //让文件指针从当前位置向文件开始方向移动10个字节

streamObjectseekg(10,ios::beg); //让文件指针定位到离文件开头10个字节的位置

以此类推

更具体的用法请查看MSDN,里面有详细的介绍

补充:啊,对了,读取文件指针当前指向的数据的方式是这样的:

比如读取int:

int i;

streamObject>>i;

读取字符串:

string str;

streamObject>>str;

默认会自动过滤空格和换行

读取后文件指针会向文件末方向偏移读取的字节数

首先定义文件指针 fp=fopen("文件名称","r");

然后用fseek()设置文件指针的位置;

最后用fgets()得到行信息;

int fseek(FILE stream, long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。

fgets()函数原型

char fgets(char buf, int bufsize, FILE stream);

参数

buf: 字符型指针,指向用来存储所得数据的地址。

bufsize: 整型数据,指明存储数据的大小。

stream: 文件结构体指针,将要读取的文件流。

以上就是关于c++ 中如何读取文件 并使用文件中的数据全部的内容,包括:c++ 中如何读取文件 并使用文件中的数据、fwrite执行后文件指针会不会自动偏移,我用fread时会,用fwrite不会、vc中怎样读取文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10154252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存