C/C++——打开文件读取数据的各种方式「建议收藏」

C/C++——打开文件读取数据的各种方式「建议收藏」打开文件在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作函数:open()voidopen(constchar*filename,ios_base::openmodemode=ios_base::in|ios_base::ou


Jetbrains全系列IDE稳定放心使用

打开文件

在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作
函数:open()

void open ( const char * filename,  
            ios_base::openmode mode = ios_base::in | ios_base::out );  

void open(const wchar_t *_Filename,  
        ios_base::openmode mode= ios_base::in | ios_base::out,  
        int prot = ios_base::_Openprot); 

     参数: filename    操作文件名
           mode        打开文件的方式
           prot        打开文件的属性     //基本很少用到,在查看资料时,发现有两种方式

例子:

ofstream out;  
out.open("data.txt", ios::in|ios::out|ios::binary) 

fstream 流方法读数据

data.txt文件如下
这里写图片描述
1.读取方式: 逐词读取, 读词之间用空格区分

void readdatafromfileWBW()
{
    ifstream fin("data.txt");
    string s;
    while (fin >> s)
    {
        cout << s << " ";//空格是为了避免数据都连在一块儿
    }
    cout << endl;
}

程序结果:(每个数都要读取一次)
这里写图片描述

2.读取方式: 逐行读取, 将行读入字符数组, 行之间用回车换行区分

void readdatafromfileLBL()
{
    ifstream fin("data.txt");
    const int LINE_LENGTH = 100;
    char str[LINE_LENGTH];
    while (fin.getline(str, LINE_LENGTH))
    {
        cout << "Read from file: " << str << endl;//要输出4次
    }
}

程序结果:
这里写图片描述

3.读取方式: 逐行读取, 将行读入字符串, 行之间用回车换行区分

void readdatafromfileLBL()
{
    ifstream fin("data.txt");
    string s;
    while (getline(fin, s))
    {
        cout << "Read from file: " << s << endl;//读取4次(4行)
    }
}

程序结果:
这里写图片描述

4.读取时检测

void readfile(string filename){
    ifstream fin(filename);
    string s;
    if (!fin)//检测文件输入是否正常
    {
        cout << "文件不能打开" << endl;
    }
    else{
        while (fin >> s){
            cout << s << ' ';
        }
        cout << endl;
    }
    fin.close();
}

C语言打开文件读取数据

C语言中要打开一个文件,需要调用fopen函数。
一、函数名:fopen
二、头文件:stdio.h
三、函数声明:
FILE * fopen(const char * path,const char * mode);
四、函数参数:
参数path字符串包含欲打开的文件路径及文件名,可以是相对路径,也可以是绝对路径。
参数mode字符串则代表着流形态。常见的mode形式有如下几种:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
五、返回值:
如果操作成功,会返回一个非空的FILE*指针,该指针用于后续对文件的操作,如读、写、关闭等。
如失败返回NULL。

在C语言中提供了多种文件读写的函数:
·字符读写函数 :fgetc和fputc
·字符串读写函数:fgets和fputs
·数据块读写函数:freed和fwrite
·格式化读写函数:fscanf和fprinf

读取文件
程序1:
fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:字符变量=fgetc(文件指针);例如:ch=fgetc(fp);其意义是从打开的文件fp中读取一个字符并送入ch中。

#include <stdio.h>

int main()
{
    FILE *fp;
    char ch;
    if ((fp = fopen("data.txt", "r") )== NULL){
        printf("Cannot open file\n");
    }
    else{
        ch = fgetc(fp);
        while (ch != EOF){
            putchar(ch);
            ch = fgetc(fp);
        }
    }
    fclose(fp);
    return 0;
}

程序2:
fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。

#include <stdio.h>

int main()
{
    FILE *fp;
    char ch[100];
    if ((fp = fopen("data.txt", "r") )== NULL){
        printf("Cannot open file\n");
    }
    else{
        while (fgets(ch, 100, fp)){
            printf("%s",ch);
        }
    }
    printf("\n");
    fclose(fp);
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182223.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 电脑蓝屏出现collecting_开机蓝屏collecting

    电脑蓝屏出现collecting_开机蓝屏collecting1.问题描述如题,在用PyCharm进行Python代码调试查看具体变量时,会随机遇到一直显示collectingdata,到最后报错Timeoutwaitingforresponse,在界面中看不到变量内部的内容,如下图所示:2.解决办法在PyCharm,打开Setting界面,在如下设置项中勾选“Geventcompatible”即可,如下图所示:至此,问题得到解决。…

    2022年8月25日
  • 戴尔r740服务器重装系统_戴尔r740安装server2016

    戴尔r740服务器重装系统_戴尔r740安装server2016RAID配置:1.开机F2进入bios2.选择devicesetting3.IntegratedRaidcontroller1xxxxxx(raid卡型号)一般是第一行4.选择MainMenu5.ConfigurationManagement6.选择CreateVirtualDisk7.Raid级别,之后点击selectphysicalDisks8.根据硬盘类型接口选择硬盘,选择硬盘后应用applychanges9.此处可以设定

    2022年10月5日
  • MyEclipse8.6注册码代码「建议收藏」

    MyEclipse8.6注册码代码「建议收藏」将MyEclipseGenjava类添加到MyEclipse项目中,右健运行(runasjavaapplication)在控制台输入要注册的name按回车,

    2022年9月29日
  • 4G网络架构_三大网络架构

    4G网络架构_三大网络架构1,4G是第四代移动通信技术,该技术包括TD-LTE和FDD-LTE两种制式,严格意义上来讲LTE只是3.9G,只有升级版的LTEAdvanced才满足国际电信联盟对4G的要求。4G是集3G与WLAN于一体,并能够快速传输数据、高质量、音频、视频和图像等。4G能够以100Mbps以上的速度下载,比目前的家用宽带ADSL(4兆)快25倍,并能够满足几乎所有用户对于无线服务的要求。

    2022年9月21日
  • 利用IAR Timeline工具测试delay函数执行时间

    利用IAR Timeline工具测试delay函数执行时间”要把大象放冰箱,总共分几步”,呵呵,写到本篇博客的时候突然想起小品宋丹丹说的那句经典台词了(俺们东北人儿对本山大叔的作品真是滚瓜烂熟了,搞的舍友还时不时跟我学上一学),哈哈,所以就索性给题目也加上了“几步”的说法,把复杂的事情简单化,也起到吸引人眼球的作用(当然本篇也是有实料的,进来的不会让你失望的,呵呵)。咳咳,至于到底是几步,是不是传说中的“三步”来,哈哈,那还得下面分解。。。  

    2022年5月21日
  • 神经网络轴承故障诊断_一维卷积神经网络详解

    神经网络轴承故障诊断_一维卷积神经网络详解基于一维卷积神经网络的滚动轴承故障识别提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录基于一维卷积神经网络的滚动轴承故障识别一、数据预处理二、模型搭建三、使用步骤1.引入库2.读入数据总结一、数据预处理采用美国凯斯西储大学(CWRU)的开放轴承数据库的样本进行实验分析,轴承故障产生的实验台如下图所示。使用电火花加工技术分别在轴承的内圈、外圈和滚动体上引入单点缺陷,故障尺寸分别为7、14和21in,以48kHz采样频率采集不同负载下的故障轴承振动数据用于实验分析。

    2022年9月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号