C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。
問題① ファイルの内容を、別のファイルへコピーするプログラムを作成してください。
この手のプログラムでは、改行文字のように、環境によっては変換が行われてしまう文字について、その変換を抑制する必要があります。そのためには、バイナリモードを使用します。
#include <iostream>
#include <fstream>
#include <cstdlib>
int main()
{
std::ifstream ifs("test.txt", std::ios_base::in | std::ios_base::binary);
if (!ifs) {
std::exit(EXIT_FAILURE);
}
std::ofstream ofs("test2.txt", std::ios_base::out | std::ios_base::binary);
if (!ofs) {
std::exit(EXIT_FAILURE);
}
char c;
while (ifs.get(c)) {
.put(c);
ofs}
}
問題② fstream において、読み取り位置や書き込み位置を操作して、それぞれの現在位置がどのように変化するか確認してください。
#include <iostream>
#include <fstream>
#include <cstdlib>
int main()
{
std::fstream fs("test.txt", std::ios_base::in | std::ios_base::out | std::ios_base::trunc);
if (!fs) {
std::exit(EXIT_FAILURE);
}
<< "test" << std::endl;
fs std::cout << "tellg: " << fs.tellg() << "\n"
<< "tellp: " << fs.tellp() << std::endl;
.seekg(-2, std::ios_base::cur);
fsstd::cout << "tellg: " << fs.tellg() << "\n"
<< "tellp: " << fs.tellp() << std::endl;
.seekp(-2, std::ios_base::cur);
fsstd::cout << "tellg: " << fs.tellg() << "\n"
<< "tellp: " << fs.tellp() << std::endl;
}
実行結果:
tellg: 6
tellp: 6
tellg: 4
tellp: 4
tellg: 2
tellp: 2
tellg と tellp が返す値がつねに連動していることが分かります。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |