====== ファイル入出力 ======
* ファイル
* テキストファイル
* 中身は数値や文字が文字コードで、数字や文字として書かれている
* 文字コードのバイト数毎にテキスト読み込み関数で呼んでいけばいいから、プログラム作るのは結構らくちん
* 数の場合、数値「3.14」が「33 2e 31 34」のように文字になっているので読み込んでから「文字列」⇒「数値」の変換が必要
* 書き込みも何も考えず文字にして書くから、coutで文字を表示するのとほぼ同様に、書き込みできる
* バイナリファイル
* 中身は文字は文字コード、数値は数値のメモリ表現そのまま、をファイルに書き込んでいくスタイル
* すべて2進数で表されているので、文字のみの場合よりファイルサイズが小さくなる場合が多い(何故かは考えてみてね)
* 数の場合、、数値「3.14」がプログラム内でfloatなら「110011 101110 110001 110100」(浮動小数点形式)で書き込まれる。
* [[https://siv3d.jp/web/sample/IEEE754Float32/IEEE754Float32.html|浮動小数点シミュレータ]]
* 読み込むときには、元の型が何だったかしらないと読込サイズがわからないので、読込サイズを指定しながら読み込む
==== C++とかのファイル入出力の手順 ====
* ファイル
* 書き込み
- オープン(ファイル指定、モード指定(しないとtext?))
- 書き込み
- クローズ
* 読み込み
- オープン(ファイル指定、モード指定)
- 読み込み
- クローズ
__オープンしたファイルは必ずクローズする__掟\\
C++などでは、ファイルをオープンすると、__プログラムから見たカレントフォルダ__に指定ファイルがあるか探す\\
ただし、**visual studio上からプログラムを実行**するときは、VSのプロジェクトのあるフォルダにあるファイルを探します。\\
file path(ファイルパス)
相対パス(自分のいるフォルダからの関係で指定)
絶対パス(ドライブの根っこから自分で指定)
C:\Users\y.sato\source\repos\file_inout_sample
フォルダ指定に注意しないと、他人に渡したときに読めなくなるよ!
1行まるっと読み込んで、テキスト解析→データに
数字は数値に
文字は文字に
#include
#include
#include
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;
}