ファイル操作 -ソース-
ファイルオープン、クローズ
ファイルを開いて閉じるだけの例
#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;
}