C保姆级教程---------详谈文件读写篇

一、I/O流

头文件 <fstream>
C++中把对文件的读写操作都封装在以下类中:
ofstream    对文件的写操作,继承了ostream类的功能
ifstream    对文件的读操作,继承了istream类的功能
fstream     对文件的读写操作,继承了ofstream\istream

二、C++对文本文件的读写操作

1、创建流对象,通过流对象打开文件

a、创建流对象并用有参构造打开文件

ofstream fout(const char *filename,<openmode mode>);

b、无参构造创建流对象,再通过成员函数打开文件

void open(const char *filename);
void open(const char *filename, openmode mode);
filename:文件路径
mode:文件的打开方式
ios::app    添加输出 
ios::ate    当已打开时寻找到EOF 
ios::binary 以二进制模式打开文件 
ios::in     为读取打开文件 
ios::out    为写入打开文件 
ios::trunc  覆盖存在的文件

ifstream类 默认只读方式打开文件,文件不存在则失败 r
ofstream类 默认只写方式打开文件,文件不存在则创建,存在则清空 w
fstream类 默认读写方式打开文件,文件不存在则失败 r+

2、判断文件是否打开成功

a、使用 !类对象名 的方式进行判断

if(!fin)//失败
else    //成功

b、使用 good fail 成员函数进行判断上一次文件操作是否成功\失败 需要注意返回值

3、读写文件

流对象 << 文本数据 写操作
流对象 >> 变量 读操作

4、关闭文件

close();

注意:只是关闭流对象的当前打开文件,但是流对象依然可以继续打开新文件
注意:在读写内建类型数据时,原有的<< >>运算符就可以直接进行文本读写,但是在对类对象进行读写操作时,绝大多数的类成员变量时private,因此无法直接在类外进行读写
由于ostream/istream是ofstream/ifstream的父类,因此如果在它们里面重载了 << >> 运算符,那么除了可以直接通过cout/cin输出输入类对象外,还可以用于直接文本读写类对象,一举两得

三、C++的随机读写

C++为文件IO流提供了两套设置文件位置指针的成员函数,目的为了兼容有两个位置指针的操作系统,但是UNIX\Linux和Windows系统底层只有一个位置指针,所以使用哪套都可以

istream &seekg( off_type offset,ios::seekdir origin);
功能:通过 偏移值+基础位置 设置输入流位置指针的位置
offset:偏移量
origin:基础位置
    ios::beg    文件开头
    ios::cur    当前位置
    ios::end    文件末尾
istream &seekg(pos_type position);

功能:通过 绝对位置 设置输入流位置指针的位置

ostream &seekp(off_type offset,ios::seekdir origin);
ostream &seekp(pos_type position);

功能与seekg类似,用哪个都可以

pos_type tellg();

功能:获取输入流的位置指针的位置

pos_type tellp();

功能:获取输出流的位置指针的位置

bool eof();

功能:判断文件的上一次读操作是否从文件末尾开始读,是返回真

四、C++对二进制文件的读写操作

1、创建流对象,打开文件

a、使用有参构造创建并打开文件
b、使用无参构造创建对象,通过open成员函数打开文件,mode参数增加 ios::binary (Windows下一定要加)

2、二进制读写操作

 ostream &write(const char *buffer,streamsize num);
功能:以二进制方式写入文件
buffer:待写入数据的内存首地址
num:要写入的字节数
注意:C++中文件I/O流的write只有两种结果,要么num个字节全部写入成功吗,要么一个都没有写入,只需要使用 good\fail 判断是否写入成功
istream &read(char *buffer,streamsize num);
功能:以二进制方式读文件
buffer:存储数据的内存首地址
num:要读取的字节数
  streamsize gcount();

功能:获取上一次读取文件操作时读到的字节数
注意:在以二进制方式读写对象时,对象的成员不应该有指针(以及string)类型,因为在写入时只会写入指针成员变量(地址编号),而下一次读取该指针变量时,该指针所指向的内存极大可能不是指向上次写入时的内存了,因此读到的该编号没意义了

一直读二进制文件到末尾:

while(true)
{
	//读操作 read fin >> obj
	if(fs.eof())
	//其它操作
}

五、类型信息识别

typeid运算符可以获取数据的类型
typeid(数据)

1、返回值是一个类类型对象
2、该类类型中有一个name成员函数,可以获取数据的类型并转换为字符串
3、该类重载了 == 运算符 可以判断两个数据是否是同一个类型
4、它可以区别父类指针或引用指向的是哪个子类,但是前提是父类子类之间构成多态
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到 Vue DHTMLX-Gantt 导出 Excel 的保姆完整教程时,以下是一步一步的指南: 1. 确保您的项目中已经安装了 Vue 和 DHTMLX-Gantt。如果尚未安装,请使用以下命令进行安装: ```bash npm install vue dhtmlx-gantt ``` 2. 在您的 Vue 组件中引入所需的库和样式: ```javascript import 'dhtmlx-gantt'; import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'; ``` 3. 创建一个 Vue 组件,并在模板中添加一个 Gantt 图表和一个按钮: ```html <template> <div ref="ganttContainer" style="width: 100%; height: 600px;"></div> <button @click="exportData">导出 Excel</button> </template> <script> import * as XLSX from 'xlsx'; import FileSaver from 'file-saver'; export default { mounted() { const ganttContainer = this.$refs.ganttContainer; gantt.init(ganttContainer); // 设置 Gantt 图表的配置和数据 // 示例数据 const tasks = [ { id: 1, text: '任务1', start_date: '2022-01-01', duration: 5, progress: 0.5 }, { id: 2, text: '任务2', start_date: '2022-01-06', duration: 4, progress: 0.2 }, // 其他任务... ]; gantt.parse({ data: tasks }); }, methods: { exportData() { const gantt = this.$refs.ganttContainer.$gantt; const tasks = gantt.getDatastore('task').getItems(); // 将任务数据转换为 Excel 数据格式 const data = tasks.map((task) => { return { id: task.id, text: task.text, start_date: task.start_date, duration: task.duration, progress: task.progress, }; }); // 创建 Excel 文件 const worksheet = XLSX.utils.json_to_sheet(data); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, 'Gantt Data'); const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); const excelData = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); // 下载 Excel 文件 FileSaver.saveAs(excelData, 'gantt_data.xlsx'); }, }, }; </script> <style> /* 可选的样式 */ </style> ``` 4. 在上述示例代码中,需要注意以下部分: - 在 `mounted` 钩子中,使用 `gantt.init(ganttContainer)` 初始化 Gantt 图表,并根据您的需求设置其配置和数据。 - `exportData` 方法用于将 Gantt 图表数据导出到 Excel。确保在 `exportData` 方法中的 `this.$refs.ganttContainer.$gantt` 是对 Gantt 图表组件的正确引用。 - 点击 "导出 Excel" 按钮时,将会生成一个名为 `gantt_data.xlsx` 的 Excel 文件,其中包含了 Gantt 图表的数据。 这就是使用 Vue DHTMLX-Gantt 导出 Excel 的保姆完整教程。希望对您有所帮助!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值