ファイル入出力

  • ファイル
    • テキストファイル
      • 中身は数値や文字が文字コードで、数字や文字として書かれている
      • 文字コードのバイト数毎にテキスト読み込み関数で呼んでいけばいいから、プログラム作るのは結構らくちん
      • 数の場合、数値「3.14」が「33 2e 31 34」のように文字になっているので読み込んでから「文字列」⇒「数値」の変換が必要
      • 書き込みも何も考えず文字にして書くから、coutで文字を表示するのとほぼ同様に、書き込みできる
    • バイナリファイル
      • 中身は文字は文字コード、数値は数値のメモリ表現そのまま、をファイルに書き込んでいくスタイル
      • すべて2進数で表されているので、文字のみの場合よりファイルサイズが小さくなる場合が多い(何故かは考えてみてね)
      • 数の場合、、数値「3.14」がプログラム内でfloatなら「110011 101110 110001 110100」(浮動小数点形式)で書き込まれる。
      • 読み込むときには、元の型が何だったかしらないと読込サイズがわからないので、読込サイズを指定しながら読み込む
  • ファイル
    • 書き込み
      1. オープン(ファイル指定、モード指定(しないとtext?))
      2. 書き込み
      3. クローズ
    • 読み込み
      1. オープン(ファイル指定、モード指定)
      2. 読み込み
      3. クローズ

オープンしたファイルは必ずクローズする

C++などでは、ファイルをオープンすると、プログラムから見たカレントフォルダに指定ファイルがあるか探す
ただし、visual studio上からプログラムを実行するときは、VSのプロジェクトのあるフォルダにあるファイルを探します。

file path(ファイルパス)
相対パス(自分のいるフォルダからの関係で指定)
絶対パス(ドライブの根っこから自分で指定)
C:\Users\y.sato\source\repos\file_inout_sample
フォルダ指定に注意しないと、他人に渡したときに読めなくなるよ!

1行まるっと読み込んで、テキスト解析→データに
数字は数値に
文字は文字に
#include <iostream>
#include <fstream>
#include <string>
 
using std::cout;
using std::cin;
using std::string;
using std::endl;
using std::ofstream;//アウトプットファイルストリーム
using std::ifstream;//インプットファイルストリーム
 
int main()
{
	//ofstream out_file;//ファイルストリームのインスタンスを作成
	//string fpath = "C:\\Users\\y.sato\\source\\repos\\file_inout_sample\\";
	//string fname = "output.txt";
	//string openFileName = fpath + fname;
	//out_file.open(openFileName, std::ios::app|std::ios::out);//ストリームがオープンする
	//if (out_file.fail())
	//{
	//	cout << "そんなファイルはない!" << endl;
	//	exit(0);
	//}
	//int idata = 10;
	//char cdata = 's';
	//float fdata = 3.14;
	//string str = "Hi! I'm very very happy today.";
	//out_file << str << endl;//ストリームにデータを流す
	//out_file << idata << "," << cdata << "," << fdata << endl;
	//out_file.close();//ストリームを閉じる
	ifstream input_file;
	//string fpath = "C:\\Users\\y.sato\\source\\repos\\file_inout_sample\\";
	string fname = "output.txt";
	//string openFileName = fpath + fname;
	input_file.open(fname, std::ios::in);
	if (input_file.fail())//エラー処理は大事
	{
		cout << "ファイルオープンに失敗" << endl;
		exit(0);
	}
	string indata;
	//input_file >> indata;
	std::getline(input_file, indata);
 
	cout << indata;
	//string str1 = "3.14"
	//stringstream ss(str1);
	//double var;
	//ss >> var;
 
 
	input_file.close();
	return 0;
}
  • game-engineer/classes/2022/game-programing-2/first-term/7/7-22-1.txt
  • 最終更新: 4年前
  • by root