ファイル操作 -ソース-

ファイルオープン、クローズ

ファイルを開いて閉じるだけの例

#include <stdio.h> int main(void) { FILE *fp = NULL; // ファイルポインタ // test.txtファイルを読み込みモードで開く fopen_s(&fp, "test.txt", "r"); // fpがNULL以外の値が入ってるならオープン成功 if (fp != NULL) { // test.txtファイルを閉じる fclose(fp); } else { printf("ファイルオープンエラー\n"); } return 0; }

ファイル読み込み(テキストモード)

fgetsでテキストファイルの中身を取得して表示する例

fgetsの戻り値がNULLまでループする

#include <stdio.h> int main(void) { FILE *fp = NULL; // ファイルポインタ // test.txtファイルを読み込みモードで開く fopen_s(&fp, "test.txt", "r"); if (fp != NULL) { // 文字格納用の配列 char buffer[256] = {}; char *str = NULL; while ((str = fgets(buffer, 256, fp)) != NULL) { printf("%s", buffer); printf("%s", str); } // test.txtファイルを閉じる fclose(fp); } else { printf("ファイルオープンエラー\n"); } return 0; }

ファイルポインタがEOFか調べる

#include <stdio.h> int main(void) { FILE *fp = NULL; // test.txtファイルを読み込みモードで開く fopen_s(&fp, "test.txt", "r"); if (fp != NULL) { while (true) { // 文字格納用の配列 char buffer[256] = {}; // fgets => ファイルから一行分をbufferに取得 fgets(buffer, 256, fp); printf("%s", buffer); // EOFチェック if (feof(fp) != 0) { break; } } // test.txtファイルを閉じる fclose(fp); } else { printf("ファイルオープンエラー\n"); } return 0; }

ファイル書き込み(テキストモード)

fputs、fprintfでファイルに書き込みを行う

#include <stdio.h> int main(void) { FILE *fp = NULL; // test2.txtファイルを書き込みモードで開く fopen_s(&fp, "test2.txt", "w"); if (fp != NULL) { fputs("fputs write\n", fp); fprintf(fp, "fprintf write\n"); // test2.txtファイルを閉じる fclose(fp); } else { printf("ファイルオープンエラー\n"); } return 0; }

ファイル読み込み(バイナリモード)

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

// #define DEBUG	// DEBUG用define

int main(void)
{
	FILE *fp = NULL;

	// test.txtファイルを読み込みモードで開く
	fopen_s(&fp, "test.txt", "rb");

	if (fp != NULL)
	{
		int size = 0;
		char *buffer = NULL;

		// ファイルサイズ取得
		fseek(fp, 0, SEEK_END);
		size = ftell(fp);
		fseek(fp, 0, SEEK_SET);

		// メモリの動的確保
		buffer = (char*)malloc(size);
		memset(buffer, 0, sizeof(char) * size);
#ifdef DEBUG
		for (int i = 0; i < size; i++)
		{
			printf("buffer[%d] =%d\n", i, buffer[i]);
		}
#endif
		fread(buffer, sizeof(char) * size, 1, fp);
#ifdef DEBUG
		for (int i = 0; i < size; i++)
		{
			printf("buffer[%d] =%d\n", i, buffer[i]);
		}
#endif
		printf("%s", buffer);

		// test2.txtファイルを閉じる
		fclose(fp);
		// 動的メモリの開放
		free(buffer);
	}
	else
	{
		printf("ファイルオープンエラー\n");
	}

	return 0;
}

ファイル書き込み(バイナリモード)

#include <stdio.h>

int main(void)
{
	FILE *fp = NULL;
	// test3.txtファイルを書き込みモードで開く
	fopen_s(&fp, "test3.txt", "wb");

	if (fp != NULL)
	{
		char test[26] = {};
		for (int i = 0; i < 26; i++)
		{
			test[i] = 'A' + i;
		}

		// 26バイトを1回で書き込む
		fwrite(test, sizeof(char) * 26, 1, fp);

		// ファイルを閉じる
		fclose(fp);
	}

	return 0;
}