Linux/AP_Autosar/C++系列之 C++下的IO

无聊逛51
发布于 2023-11-9 12:01
浏览
0收藏

 一步一步走,日坤月累,2023走到最下面

Linux/AP_Autosar/C++系列之 C++下的IO-鸿蒙开发者社区

流的概念

C++语言实现数据的输入与输出定义了一个很大很大的类库。其中ios为基类。派生出来四个类

  • istream
  • ostream
  • fstreambase
  • strstreambase

具体什么样的呢?

Linux/AP_Autosar/C++系列之 C++下的IO-鸿蒙开发者社区

ifstream:  输入文件流,用于从文件中读取信息

ofstream:输出文件流,用于创建文件并且向文件中写入信息

fstream: 顾名思义,实现了上面两个类的总和


所以使用的时候可以简单的

#include <fstream>
using namespace std;

打开,关闭,写入,读取

#include <fstream>
#include <iostream>
#include <string>
using namespace std;

int main(void)
{
    char data[100];

    ofstream outfile;

    outfile.open("a.txt");

    cout <<"write some data into a.txt"<<endl;

    cin.getline(data, 100);

    outfile<<data<<endl;

    outfile.close();


    cout <<"data is: "<<data<<endl;

    ifstream infile;
    infile.open("a.txt");

    cout <<"read data from infile"<<endl;

    infile>>data;
    cout << data <<endl;

    infile.close();
    return 0;

}

结果呢:

root@iZ2vcb0v0htktk3gwslzh8Z:~/DoVehicle# g++ main.cpp -o main
root@iZ2vcb0v0htktk3gwslzh8Z:~/DoVehicle# ./main 
write some data into a.txt
asdfgdsgfdsdg
data is: asdfgdsgfdsdg
read data from infile
asdfgdsgfdsdg
root@iZ2vcb0v0htktk3gwslzh8Z:~/DoVehicle#

输入的过程很简单

Linux/AP_Autosar/C++系列之 C++下的IO-鸿蒙开发者社区

文件位置指针,读,写取文件数据块

函数 

int fseek(FILE *fp, LONG offset, int origin)

这里可以看出来

  • 文件
  • 偏移多少
  • 基是哪里

SEEK_SET :文件开始

SEEK_CUR: 文件当前

SEEK_END: 文件结尾


这里我们举个例子使用以下这个位置函数 新建一个文件a.txt 如下

Linux/AP_Autosar/C++系列之 C++下的IO-鸿蒙开发者社区

#include "fstream"
#include "iostream"


using namespace std;

int main()
{
    ifstream ifile;
    ifile.open("a.txt");

    ifile.seekg(-5,ifile.end);
    char read_data[2];
    ifile.read(read_data,2);

    cout <<read_data<<endl;
    ifile.close();

    ofstream ofile;

    ofile.open("a.txt",ios::app);
    char write_data[2] = {'a','b'};

    ofile.seekp(0,ofile.end);

    ofile.write(write_data,2);

    cout <<"data length: "<<ofile.tellp()<<endl;;
    return 0;

}


root@iZ2vcb0v0htktk3gwslzh8Z:~/DoVehicle# g++ seek.cpp -o seek
root@iZ2vcb0v0htktk3gwslzh8Z:~/DoVehicle# g++ seek.cpp -o seek^C
root@iZ2vcb0v0htktk3gwslzh8Z:~/DoVehicle# ./seek 
78
data length: 13
root@iZ2vcb0v0htktk3gwslzh8Z:~/DoVehicle#

看来问题并不大

其实这里的ifstream 和 ofstream

的in out 对应的是内存。in不是指 以输入模式打开文件,而是输出模式。

因为in 指示的 in memory 向内存写入。所以对于文件来说 是 输出的意思。

加个笔记

Linux/AP_Autosar/C++系列之 C++下的IO-鸿蒙开发者社区




文章转载自公众号:汽车与基础软件

分类
已于2023-11-9 12:01:06修改
收藏
回复
举报
回复