C++初学者指南-2.输入和输出—文件输入和输出
文章目录
- C++初学者指南-2.输入和输出---文件输入和输出
- 1.写文本文件
- 2.读文本文件
- 3.打开关闭文件
- 4.文件打开的模式
1.写文本文件
使用: std::ofstream(输出文件流)
#include <fstream> // 文件流头文件
int main () {std::ofstream os{"squares.txt"}; // 打开文件// 如果文件流没问题表示可以写入文件if (os.good()) {for (int x = 1; x <= 6; ++x) { // 写入:x值空格x二次方的值和换行符os << x << ' ' << (x*x) << '\n';}}
} // 文件会自动关闭
上面代码:
- 创建一个名为squares.txt的新文件
- 如果文件已存在则覆盖!
- 每行写 2 个数字,用空格分隔。
squares.txt
1·1\n
2·4\n
3·9\n
4·16\n
5·25\n
6·36\n
2.读文本文件
使用: std::ifstream(输入文件流)
#include <iostream>
#include <fstream> // 文件流头文件
int main () {std::ifstream is{"squares.txt"}; // 打开文件// 如果文件流没问题则可以读取if ( is.good() ) {double x, y;// 只要有任何两个可读的数值,就读取出来while( is >> x >> y ) {// 打印 x,y这对值cout << x << "² = " << y << "\n"; }}
} // 文件自动关闭
squares.txt
1·1\n
2·4\n
3·9\n
4·16\n
5·25\n
6·36\n
输出:
1² = 1
2² = 4
3² = 9
4² = 16
5² = 25
6² = 36
3.打开关闭文件
在创建流对象和析构流对象时
int main (int const argc, char const*const* argv) {if (argc > 1) {// 使用C风格字符串作为文件名std::ofstream os { argv[1] };…} // 自动关闭else {// 使用std::string(C++11)std::string fn = "test.txt";std::ofstream os { fn };…} // 自动关闭
}
使用open和close
void bar () {std::ofstream os; os.open("squares.txt"); …os.close(); // open another file:os.open("test.txt"); …os.close();
}
4.文件打开的模式
默认
ifstream is {"in.txt", ios::in};
ofstream os {"out.txt", ios::out}; (覆盖现有文件)
追加到现有文件
ofstream os {"log.txt", ios::app};
二进制方式
ifstream is {"in.jpg", ios::binary};
ofstream os {"out.jpg", ios::binary};
// 我们以后会学到这一切是什么意思的...
std::uint64_t i = 0;
// 读取二进制数据
is.read(reinterpret_cast<char*>(&i), sizeof(i));
// 写入二进制数据
os.write(reinterpret_cast<char const*>(&i), sizeof(i));
运行示例程序
#include <iostream>
#include <fstream>
#include <cstdint>int main (int argc, char* argv[]) {if (argc < 3) {std::cerr << "usage: " << argv[0] << " <integer> <filename>\n";return 0;}std::string filename {argv[2]};{ // write binarystd::uint64_t i = atoi(argv[1]);std::cout << "writing: " << i << " to " << filename << "\n";std::ofstream os {filename, std::ios::binary};if (os.good()) {os.write(reinterpret_cast<char const*>(&i), sizeof(i));}}{ // read binarystd::uint64_t i = 0;std::ifstream is {filename, std::ios::binary};if (is.good()) {is.read(reinterpret_cast<char*>(&i), sizeof(i));std::cout << "read as: " << i << "\n";}}
}
运行上面代码
附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^