打开与关闭一个文件
C++ 中有 3 种类型的流:输入流,输出流,以及 输入输出流。我们可以通过将文件关联到一个流上来打开一个文件。
要打开一个输入流,必须将流声明为 ifstream 类型对象。
要打开一个输出流,必须将流声明为 ofstream 类型对象。
要打开一个输入输出流,必须将流声明为 fstream 类型对象。
如果已经创建了一个流,那么可以使用 open() 函数将流关联到文件上。这个函数分别是上面 3 种流类型的成员函数,原型分别如下:
[C++] 纯文本查看 复制代码
void ifstream::open(const char *filename, ios::openmode mode = ios::in);
void ofstream::open(const char *filename, ios::openmode mode = ios::out | ios::trunc);
void fstream::open(const char *filename, ios::openmode mode = ios::in | ios::out);
其中,filename 是文件的名字;mode 指定了文件的打开方式,他是一个类 ios 中定义的枚举值,如下所示:ios::app //添加到文件末尾
ios::ate //打开文件时,文件的当前位置被定位到文件末尾
ios::binary //以二进制模式打开文件
ios::in //流可以从文件中输入
ios::out //流可以输出到文件中
ios::trunc //原文件中的内容被清除,文件长度被设为 0 可以用逻辑运算符 OR 将多个值组合一起。
以普通方式打开一个输出文件:ofstream out;
out.open("test.txt"); 由于 open() 中的 mode 在相应的默认参数,所以上面在打开文件时也不需要显式地指定出来。
实际上,类 fstream, ifstream 和 ofstream 中都定义了可以自动打开文件的构造函数,且这些构造函数的参数与默认的 open() 所带的参数一样,那么可以将打开文件写成:
[C++] 纯文本查看 复制代码
ifstream mystream("myfile"); //打开文件进行输入
ofstream mystream("myfile"); //打开文件进行输出
在操作完毕后,可以用 close() 函数来关闭一个文件,比如 mystream.close(); ,这里 close() 不需要带有参数,因为 mystream 本身就是一个关联到文件的流。
另外,还有一个 is_open() 函数用来判断是否成功打开一个文件,这个函数分别是类 fstream, ifstream 和 ofstream 的成员函数。
下面文件演示写入一个文件:
[C++] 纯文本查看 复制代码 #include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream out("test.txt");
if (!out) {
cout << "Cannot open file.\n";
return 1;
}
out << 10 << " " << 123.23 << "\n";
out << "This is a short text file.";
out.close();
return 0;
}
运行输出:./writefile
cat test.txt
10 123.23
This is a short text file. 下面程序演示从上面所创建的 test.txt 中读入一个整数,一个浮点数,一个字符以及一个字符串:
[C++] 纯文本查看 复制代码
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char ch;
int i;
float f;
char str[80];
ifstream in("test.txt");
if(!in) {
cout << "Cannot open file.\n";
return 1;
}
in >> i;
in >> f;
in >> ch;
in >> str;
cout << i << " " << f << " " << ch << endl;
cout << str;
in.close();
return 0;
}
运行输出:./readfile
10 123.23 T
his 注意,在读入文本文件时,将会发生字符转换。例如,空白字符将被忽略。如果在想读入文件不发生字符转换,那么就必须以二进制模式打开文件。还需要注意,在使用 >> 读入字符串时,在遇到第一个空白字符后输入将会停止。 |