C++学习笔记之文件和流
来源:互联网 发布:中关村人工智能活动季 编辑:程序博客网 时间:2024/04/20 12:22
文件
普通文件
二进制文件
文本文件
输入输出设备:键盘、显示器、打印机等
- 标准输入流(用指针stdin操作)
- 标准输出流(用指针stdout操作)
- 标准错误流(用指针stderr操作)
- C++采用相同的方式操作普通文件和I/O设备
打开一个已存在的文件或建立并打开一个新文件
FILE *fopen( const char *filename, const char *mode );
filename——路径及文件名
mode——打开方式
例子1:使用FILE指针新建一个文本文件,写入了字符串"This is a test file. "
//文件ex16_1.cpp#include <stdio.h>main(){FILE *fptr; //定义FILE指针//打开或创建文件if ((fptr = fopen("test.txt","w")) != NULL) {//往文件中写入字符串fprintf(fptr, "This is a test file.");fclose(fptr); //关闭文件}elseprintf("Open file error.\n");return 0;}
例子2:将字符、字符串、整数、浮点数、结构等类型的数据写入文件
//文件ex16_2.cpp ,写文件#include <stdio.h>struct Test{int a;double b;};int main() {Test st;st.a = 10;st.b = 1.1;FILE *fptr; //声明文件指针//打开文件if((fptr=fopen("writetest.dat","wb"))!=NULL){//以二进制方式写入数据fwrite(&st, sizeof(st),1,fptr);//以字符方式写入一个字符fputc('a', fptr);//以字符方式写入一个字符串fputs("Beijing", fptr);//以字符方式写入整数和浮点数fprintf(fptr, " %d %f ", 23, 12.34);//关闭文件fclose(fptr);}elseprintf("Open file error.\n");return 0;}
例子3:将例2创建的文件中的数据读出来
//文件ex16_4.cpp,读二进制文件#include <stdio.h>struct Test{int a;double b;};int main() {Test st;char s[20];int m;float n;char c;FILE *fptr;if((fptr=fopen("writetest.dat","rb"))!=NULL){fread(&st,sizeof(st),1,fptr);c = fgetc(fptr);fgets(s,8,fptr);fscanf(fptr," %d %f ",&m,&n);fclose(fptr);printf("STRUCT st: a = %d, b = %f\n",st.a, st.b);printf("CHAR c = '%c'\n", c);printf("STRING s = %s\n", s);printf("INTEGER m = %d, FLOAT n = %f\n",m, n);}else printf("File open error.\n");return 0;}
文件位置指针可以修改 int fseek(FILE *, long, int);
第一个参数——文件指针
第二个参数——偏移量
第三个参数——基准,可以为SEEK_SET、SEEK_CUR和SEEK_END,分别表示文件的起始位置、当前位置和文件尾
例子4:将例2创建的文件中的数据读出来,跳过字符'a'和字符串“Beijing”
//文件ex16_5.cpp,读文件#include <stdio.h>struct Test{int a;double b;};int main() {Test st;int m;float n;FILE *fptr;if((fptr=fopen("wrtest.txt","rb"))!=NULL){fread(&st,sizeof(st),1,fptr);//修改文件位置指针,跳过字符a和字符串Beijingfseek(fptr,8,SEEK_CUR);fscanf(fptr," %d %f ",&m,&n);fclose(fptr);printf("STRUCT st: a = %d, b = %f\n",st.a, st.b);printf("INTEGER m = %d,\nFLOAT n = %f\n",m, n);}elseprintf("File open error.\n");return 0;}
几个特殊的流对象
- 标准输出流对象cout
- 标准输入流对象cin
- 非缓冲标准错误流对象cerr
- 缓冲标准错误流对象clog
和文件流相关的几个类
- 类ifstream——文件的输入
- 类ofstream——文件的输出
- 类fstream——文件的输入输出
- 上述三个类都在头文件<fstream.h>中
例子5:使用文件流新建或打开一个文件,并写入字符串"This is a test file. "
//文件ex16_6.cpp,新建和打开文件#include <fstream>#include <iostream>using namespace std;int main(){//声明文件流对象ofstream outFile("outFile.txt",ios::out);if (!outFile)//使用错误流对象输出错误信息cerr<<"Open file or create file error."<<endl;else//输出数据到与对象outFile 关联的文件中outFile << "This is a test file.";return 0;}
通过文件流进行操作
ofstream outFile("outFile.txt",ios::out);
可以改写为:
ofstream outFile;
outFile.open("outFile.txt",ios::out);
或
ofstream outFile;
outFile.open("outFile.txt");
文件可以显式关闭:
outFile.close();
可以改写为:
ofstream outFile;
outFile.open("outFile.txt",ios::out);
或
ofstream outFile;
outFile.open("outFile.txt");
文件可以显式关闭:
outFile.close();
例子7:用文件流的方式读取上例中程序创建的文件中的数据,跳过字符串“string”
//文件ex16_9.cpp,读文件#include <fstream>#include <iostream>using namespace std;int main() {ifstream inFile ("outFile.txt", ios::in);int a; float c;if (!inFile) cerr<<"File open error."<<endl;else {inFile>>a;inFile.seekg(7,ios::cur);inFile>>c;cout<<"INT--"<<a<<endl<<"FLO--"<<c<<endl;inFile.close();}return 0;}
例子8:使用文件保存和恢复类的对象
//文件ex16_10.cpp, 以二进制方式读写对象#include <fstream>#include <iostream>using namespace std;class Test{public:Test(int m, double n){ a = m; b = n; }void set(int m, double n){ a = m; b = n; }void show(){ cout<<"int--"<<a<<"double--"<<b<<endl; }private:int a;double b;};int main() {Test st(10,10.5);cout<<"Object st:"<<endl;st.show();ofstream outFile("outFile.txt",ios::out|ios::binary);if (!outFile )cerr<<"Open file or create file error."<<endl;else {outFile.write((char *)&st,sizeof(st));outFile.close();}st.set(1,2.3);cout<<"After set, object st:"<<endl;st.show();//创建文件流对象,再次打开该文件用于读ifstream infile("outFile.txt", ios::in|ios::binary);if (!outFile )cerr<<"File open error."<<endl;else {//从文件中恢复对象stinfile.read((char *)&st,sizeof(st));infile.close();}cout<<" After read from file:"<<endl;st.show();return 0;}
- C++学习笔记之文件和流
- STM32学习笔记之 USB驱动usb_endp.c文件和usb_istr.c文件分析
- Objective-C学习笔记-之操作文件
- Objective-C学习笔记-之文件查找
- c语言学习笔记之文件操作
- c语言学习笔记之文件包含
- 《C和指针》学习笔记之堆栈
- 《C和指针》学习笔记之队列
- 《C和指针》学习笔记之树
- [Python]学习笔记之文件和异常
- Linux学习笔记之文件和目录
- C语言学习笔记之文件I/O(fgets()函数和fputs()函数)
- 学习笔记2——C语言程序的组成部分和C语言的文件流
- 学习笔记之c
- linux c语言学习笔记之文件IO
- Objective-C 学习笔记之使用跨文件依赖关系
- Linux 学习笔记之Makefile单个c文件的编写
- C语言学习笔记之目标代码文件、可执行文件、库
- Unity 官方网站
- 基本文件操作:NSFileHandle的用法
- [java]字符串的拼接问题
- linux下vi命令大全
- Android中使单选项列表框默认选中前次保存的值(即setSingleChoiceItems方法的使用)
- C++学习笔记之文件和流
- WinCE6.0 Camera驱动源码分析(二)
- executeQuery()、executeUpdate() 和 execute()
- Unity3D Android游戏添加google广告的方法——使用AdMob
- truncate drop delete difference
- 正则表达式学习(二)正则表达式的操作符及说明
- JSP九大内置对象的作用和用法总结?
- Andriod OpenGL 教程 03 - 添加颜色
- hdu 1044Collect More Jewels ( bfs + dfs )