辽宁数据网站建设哪家便宜,网站扁平化结构和树形结构,网页制作成品,百度网址大全 旧版本在对文件进行读写操作之前#xff0c;先要打开文件。打开文件有以下两个目的#xff1a;
1 . 通过指定文件名#xff0c;建立起文件和文件流对象的关联#xff0c;以后要对文件进行操作时#xff0c;就可以通过与之关联的流对象来进行。
2 . 指明文件的使用方式。使用方…在对文件进行读写操作之前先要打开文件。打开文件有以下两个目的
1 . 通过指定文件名建立起文件和文件流对象的关联以后要对文件进行操作时就可以通过与之关联的流对象来进行。
2 . 指明文件的使用方式。使用方式有只读、只写、既读又写、在文件末尾添加数据、以文本方式使用、以二进制方式使用等多种。
打开文件可以通过以下两种方式进行
1 . 调用流对象的 open 成员函数打开文件。
2 . 定义文件流对象时通过构造函数打开文件。
关闭文件时调用文件流对象的 close 成员函数即可。
使用 open 函数打开文件
先看第一种文件打开方式。以 ifstream 类为例该类有一个 open 成员函数其他两个文件流类也有同样的 open 成员函数
void open(const char* szFileName, int mode)第一个参数是指向文件名的指针第二个参数是文件的打开模式标记。
文件的打开模式标记代表了文件的使用方式这些标记可以单独使用也可以组合使用。
文件打开模式标记
ios::binary 可以和其他模式标记组合使用例如 ios::in | ios::binary表示用二进制模式以读取的方式打开文件。ios::out | ios::binary表示用二进制模式以写入的方式打开文件。一般来说如果处理的是文本文件那么用文本方式打开会方便一些。但其实任何文件都可以以二进制方式打开来读写。
在流对象上执行 open 成员函数给出文件名和打开模式就可以打开文件。判断文件打开是否成功可以看“对象名”这个表达式的值是否为 true如果为 true则表示文件打开成功。
下面的程序演示了如何打开文件
#include iostream
#include fstream
using namespace std;
int main()
{ifstream inFile;inFile.open(c:\\tmp\\test.txt, ios::in);if (inFile) //条件成立则说明文件打开成功inFile.close();elsecout test.txt doesnt exist endl;ofstream oFile;oFile.open(test1.txt, ios::out);if (!oFile) //条件成立则说明文件打开出错cout error 1 endl;elseoFile.close();oFile.open(tmp\\test2.txt, ios::out | ios::in);if (oFile) //条件成立则说明文件打开成功oFile.close();elsecout error 2 endl;fstream ioFile;ioFile.open(..\\test3.txt, ios::out | ios::in | ios::trunc);if (!ioFile)cout error 3 endl;elseioFile.close();return 0;
}调用 open 成员函数时给出的文件名可以是全路径的如第 7 行的c:\tmp\test.txt 指明文件在 c 盘的 tmp 文件夹中也可以只给出文件名如第 13 行的test1.txt这种情况下程序会在当前文件夹也就是可执行程序所在的文件夹中寻找要打开的文件。
第 18 行的tmp\test2.txt给出的是相对路径说明 test2.txt 位于当前文件夹的 tmp 子文件夹中。第 24 行的…\test3.txt也是相对路径代表上一层文件夹此时要到当前文件夹的上一层文件夹中查找 test3.txt。此外…\…\test4.txt、…\tmp\test4.txt等都是合法的带相对路径的文件名。
使用流类的构造函数打开文件
定义流对象时在构造函数中给出文件名和打开模式也可以打开文件。以 ifstream 类为例它有如下构造函数
ifstream::ifstream (const char* szFileName, int mode ios::in, int);第一个参数是指向文件名的指针第二个参数是打开文件的模式标记默认值为ios::in; 第三个参数是整型的也有默认值一般极少使用。
用流类的构造函数打开文件
#include iostream
#include fstream
using namespace std;
int main()
{ifstream inFile(c:\\tmp\\test.txt, ios::in);if (inFile)inFile.close();elsecout test.txt doesnt exist endl;ofstream oFile(test1.txt, ios::out);if (!oFile)cout error 1;elseoFile.close();fstream oFile2(tmp\\test2.txt, ios::out | ios::in);if (!oFile2)cout error 2;elseoFile.close();return 0;
}