C++ fstream的使用方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void open(const char* filename,int mode,int access);
参数:
filename:
要打开的文件名
mode:
要打开文件的方式
access:
打开文件的属性
打开文件的方式在类 ios(是所有流式 I/O 类的基类)中定义,常用的值如下:
ios::app:
以追加的方式打开文件
{ 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; }
ios::in
2)打开方式
ios::out 输出数据覆盖现有文件
ios::app 输出数据填加之现有文件末尾
ios::ate 打开文件并移动文件指针至末尾
ios::in 打开文件以输入
ios::trunc 输出文件中现有内容(ios::out 的默认操作)
ios::binary 二进制打开供读写 2、文件指针
在 C++中,对文件的操作是通过 stream 的子类 fstream(file stream)来实 现的,所以,要用这种方式操作文件,就必须加入头文件 fstream.h。下面就把 此类的文件操作过程一一道来。
一、打开文件
在 fstream 类中,有一个成员函数 open(),就是用来打开文件的,其原型 是:
和 C 的文件操作方式不同的是,C++ I/O 系统管理两个与一个文件相联系的指针。 一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操 作的位置。每次执行输入或输出时, 相应的指针自动变化。所以,C++的文件定 位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg() 是设置读位置,seekp 是设置写位置。它们最通用的形式如下:
istream &seekg(streamoff offset,seek_dir origin); ostream &seekp(streamoff offset,seek_dir origin);
streamoff 定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值, seek_dir 表示移动的基准位置,是一个有以下值的枚举:
(2)使用 getline 和 ifstream 读取文件 假设有一个叫 data.txt 的文件, 它包含以下内容:
Fry: One Jillion dollars. [Everyone gasps.] Auctioneer: Sir, that's not a number. 数据读取, 测试 。
}
//读取方式: 逐行读取, 将行读入字符串, 行之间用回车换行区分 //If you want to avoid reading into character arrays, //you can use the C++ string getline() function to read lines into strings void ReadDataFromFileLBLIntoString()
ReadDataWithErrChecking(); //带检测的读取 return 0; }
输出结果为: Read from file: Fry: Read from file: One Read from file: Jillion Read from file: dollars. Read from file: [Everyone Read from file: gasps.] Read from file: Auctioneer:
fstream fs("文件名",输入打开方式 | 输出打开方式);
三种文件流分别用于写文件、读文件、读写文件
三种文件流都可先定义,再打开文件,以 fstream 为例
fstream fs;
fs.open("文件名", 输入打开方式 | 输出打开方式);
其中“打开方式”可以不给出。
若不给出,对于 oftream 默认为 ios::out,iftream 默认为
ios::beg: 文件开头 ios::cur: 文件当前位置 ios::end: 文件结尾 这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能 与预想的值不同。
例:
file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移 1234 个字 节 file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移 1234 个字 节 file1.seekg(-128,ios::end); //把文件的读指针从文件末尾向前移 128 个字节 (注意偏移量用负数。靠,这么特殊的情况,网上一群傻逼都不写。) c++ fstream 使用(二) 2008-10-01 23:53
Read from file: Fry: One Jillion dollars. Read from file: [Everyone gasps.] Read from file: Auctioneer: Sir, that's not a number. Read from file: 数据读取, 测试 。
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc:
如果文件存在,把文件长度设为 0
可以用“或”把以上属性连接起来,如 ios::out|ios::binary
打开文件的属性取值是:
0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件
可以用“或”或者“+”把以上属性连接起来,如 3 或 1|2 就是以只读和隐 含属性打开文件。
Read from file: Fry: One Jillion dollars. Read from file: [Everyone gasps.] Read from file: Auctioneer: Sir, that's not a number. Read from file: 数据读取, 测试 。
c++ fstream 使用(一) 2009-07-14 10:37
1、包含的头文件
(1)基本使用
#include <fstream>
using namespace std;
1)C++中的三个文件流
ofstream ofs("文件名", 打开方式);
ifstream ifs("文件名", 打开方式);
以下就是基于 data.txt 的数据读取操作:
#include <iostream> #include <fstream>
#include <string>
using namespace std;
//输出空行 void OutPutAnEmptyLine()
{ cout<<"\n";
}
//读取方式: 逐词读取, 词之间用空格区分 //read data from the file, Word By Word //when used in this manner, we'll get space-delimited bits of text from the file //but all of the whitespace that separated words (including newlines) was lost. void ReadDataFromFileWBW()
{ string filename = "dataFUNNY.txt"; ifstream fin( filename.c_str()); if( !fin ) { cout << "Error opening " << filename << " for input" << endl; exit(-1); }
Read from file: Sir, Read from file: that's Read from file: not Read from file: a Read from file: number. Read from file: 数据读取, Read from file: 测试 Read from file: 。
例如:以二进制输入方式打开文件 c:\config.sys
fstream file1;
file1.open("c:\\config.sys",ios::binary|ios::in,0);
如果 open 函数只有文件名一个参数,则是以读/写普通文件打开,即:
file1.open("c:\\config.sys"); <=> file1.open("c:\\config.sys",ios::in|ios::out,0);
}
int main() { ReadDataFromFileWBW(); //逐词读入字符串 OutPutAnEmptyLine(); //输出空行
ReadDataFromFileLBLIntoCharArray(); //逐词读入字符数组 OutPutAnEmptyLine(); //输出空行
ReadDataFromFileLBLIntoString(); //逐词读入字符串 OutPutAnEmptyLine(); //输出空行
Error opening dataFUNNY.txt for input Press any key to continue
C++中 ifstream、ofstream 的用法
ofstream 是从内存到硬盘,ifstream 是从硬盘到内存,其实所谓的流缓冲就是 内存空间;
在 C++中,有一个 stream 这个类,所有的 I/O 都以这个“流”类为基础的, 包括我们要认识的文件 I/O,stream 这个类有两个重要的运算符:
1、插入器
向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就 是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。
2、析取器
从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下 就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量 x 的类型)的数据。
{ ifstream fin("data.txt");
string s; while( getline(fin,s) )
{ cout << "Read from file: " << s << endl;
} }
//带错误检测的读取方式 //Simply evaluating an I/O object in a boolean context will return false //if any errors have occurred void ReadDataWithErrChecking()
ios::ate: 属性
文件打开后定位到文件尾,ios:app 就包含有此
ios::binary: 方式的区ቤተ መጻሕፍቲ ባይዱ见前文
以二进制方式打开文件,缺省的方式是文本方式。两种
ios::in:
文件以输入方式打开(文件数据输入到内存)
ios::out:
文件以输出方式打开(内存数据输出到文件)
ios::nocreate: 不建立文件,所以文件不存在时打开失败
{ ifstream fin("data.txt"); string s; while( fin >> s ) { cout << "Read from file: " << s << endl; }
}
//读取方式: 逐行读取, 将行读入字符数组, 行之间用回车换行区分 //If we were interested in preserving whitespace, //we could read the file in Line-By-Line using the I/O getline() function. void ReadDataFromFileLBLIntoCharArray()