ファイル操作

では具体的なコードを見ていきましょう。
まずはテキストファイルの書き込み操作から進めます。

プログラムのプロジェクトファイル(.vcxprojファイル)があるフォルダに
asset というフォルダを用意し、その中に sample.txt というテキストファイルを作成してください。

 

書き込み処理の例題1

この例題では
asset/sample.txt に「text write」という文字列を書き込んで保存する
という事を行います。

大まかな手順は下記のとおりです。

  1.  fopen_s 関数で指定したファイルを指定したモードで開き、変数fpで操作できるようにする
  2.  fputs 関数で指定した文字列を、変数fpを利用してファイルに書き込む
  3.  fclose 関数でファイルを閉じる
#include 

// エントリー関数
int main(void)
{
    // ファイル構造体を扱うポインタ変数宣言
    FILE* fp = NULL;

    // プロジェクトからの相対パスで asset/sample.txt を書込モードで開く
    // asset フォルダが無いと失敗する事に注意する
    if(0 == fopen_s(&fp, "asset/sample.txt", "w"))
    {
        // 文字列を書き込む
        fputs("text write", fp);

        // 閉じる
        fclose(fp);
    }
    else {
        printf("ファイルを開けませんでした");
    }

    return 0;
}

順にみていきましょう。

 

①fopen_s 関数で指定したファイルを指定したモードで開き、変数fpで操作できるようにする

下記コードがその個所となります。

    // ファイル構造体を扱うポインタ変数宣言
    FILE* fp = NULL;

    // プロジェクトからの相対パスで asset/sample.txt を書込モードで開く
    // asset フォルダが無いと失敗する事に注意する
    if(0 == fopen_s(&fp, "asset/sample.txt", "w")) 

fopen_s 関数でファイルを開く事に成功した場合、戻り値にゼロが戻ってくる事に注意してください。
サンプルでは失敗した場合の対応も行っています。

 

fputs 関数で指定した文字列をファイルに書き込む

下記コードがその個所となります。

        // 文字列を書き込む
        fputs("text write", fp); 

fputs 関数で指定した文字列をファイルに書き込みます。
書き込みの開始位置は、変数fpで制御されており、
書き込みが行われると、書き込んだ分だけ開始位置を進めてくれます。
戻り値は成否(成功ならゼロ以上、失敗ならEOF)となります。

 

③ fclose 関数でファイルを閉じる

下記コードがその個所となります。

        // 閉じる
        fclose(fp);

ファイルは使い終わると必ず fclose で閉じるようにしてください。

 

書き込み処理の例題2

この例題では
asset/sample.txt に任意の型の変数の内容を文字列を書き込んで保存する
という事を行います。

大まかな手順は下記のとおりです。

  1.  fopen_s 関数で指定したファイルを指定したモードで開き、変数fpで操作できるようにする
  2.  fprintf 関数で指定したフォーマットで各変数の内容をファイルに書き込む
  3.  fclose 関数でファイルを閉じる
#include 

// エントリー関数
int main(void)
{
    FILE* fp = NULL;

    // プロジェクトからの相対パスで asset/sample.txt を書込モードで開く
    if (0 == fopen_s(&fp, "asset/sample_write.txt", "w"))
    {
        // 文字を入力する
        // ※スキャン集合を利用して改行だけ読み取らない、つまり、スキャンを終えるのは改行が来た時だけ
        char buffer[100] = {};
        scanf_s("%[^\n]", buffer, 100);

        // 数字を入力する
        int no = 0;
        scanf_s("%d", &no);

        // 数字を入力する
        float value = 0;
        scanf_s("%f", &value);

        // フォーマットを指定して書き込む
        fprintf(fp, "%s, %d, %f", buffer, no, value);

        // 閉じる
        fclose(fp);
    }
    else
    {
        printf("ファイルを開けませんでした");
    }

    return 0;
}

①と③は同じである為割愛します。

 

fprintf 関数で指定したフォーマットで各変数の内容をファイルに書き込む

下記コードがその個所となります。

        // フォーマットを指定して書き込む
        fprintf(fp, "%s, %d, %f", buffer, no, value);

それぞれ型の違う変数を、フォーマットを指定してファイルに書き込んでいきます。
書き込みの開始位置は、変数fpで制御されており、
書き込みが行われると、書き込んだ分だけ開始位置を進めてくれます。
戻り値には書き込んだ文字数が返ってきます。

1 2 3 4 5

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です