【C++】ストリーム
ストリームの階層
ファイルモード
std::ios::app // 追加出力 std::ios::ate // 開く時にEOFまで移動する std::ios::binary // ファイルをバイナリモードで開く std::ios::in // 読み込み専用で開く std::ios::out // 出力用にファイルを開く std::ios::trunc // 既存のファイルを上書きする
例
#include <iostream> #include <fstream> int main() { // 出力内容 auto output = [](std::ostream &os) { os << "Hello World!" << std::endl; os << "123.456.789" << std::endl; }; // コンソールに出力する output(std::cout); // テキスト(外部ファイル)に出力する std::ofstream ofs0("test.txt", std::ios::out); if (!ofs0) { std::exit(EXIT_FAILURE); } output(ofs0); ofs0.close(); // 一文字単位で割り当てる std::ifstream ifs0("test.txt", std::ios::in); if (!ifs0) { std::exit(EXIT_FAILURE); } char c; while (ifs0.get(c)) { std::cout << c; } ifs0.close(); // 一行単位で割り当てる std::ifstream ifs1("test.txt", std::ios::in); if (!ifs1) { std::exit(EXIT_FAILURE); } char str1[256] = {0}; while (ifs1.getline(str1, 255, '.')) { std::cout << str1; } // 区切り文字 OK ifs1.close(); // バイナリからサイズを指定して割り当てる std::ifstream ifs2("test.txt", std::ios::in | std::ios::binary); if (!ifs2) { std::exit(EXIT_FAILURE); } char str2[256] = {0}; ifs2.read((char*)str2, sizeof(str2)); std::cout << str2; ifs2.close(); // 動的にメモリを確保して割り当てる std::ifstream ifs3("test.txt", std::ios::in); if (!ifs3) { std::exit(EXIT_FAILURE); } ifs3.seekg(0, std::ios::end); auto size = static_cast<unsigned>(ifs3.tellg()) / sizeof(char); auto str3 = new char[size]; memset(str3, 0, size); ifs3.seekg(0, std::ios::beg); ifs3.read(str3, size); std::cout << str3; ifs3.close(); delete [] str3; // write 書き出し std::ofstream ofs1; ofs1.open("write_test.txt", std::ios::out | std::ios::trunc | std::ios::binary); // 文字列の書き込み //ofs1.write("リテラル文字は直接書き込み可能\n", 31); // 数値の書き込み int n = 100; ofs1.write(reinterpret_cast<char*>(&n), sizeof(int)); ofs1.close(); // 数値の読み込み std::ifstream ifs4("write_test.txt", std::ios::in | std::ios::binary); if (!ifs4) { exit(EXIT_FAILURE); } int n2 = 0; ifs4.read(reinterpret_cast<char*>(&n2), sizeof(int)); std::cout << n2 << std::endl; // 100 ifs4.close(); std::cout << "正常終了" << std::endl; return 0; }
引用:ファイル入出力をごっちゃにしないために
参考:C++入出力