ファイルへの入出力に関する型や変数は、stdio.h
にある。
テキストファイル
書き込み
fopen("./test.txt", "w")
で書き込みモードのフィアルポインタ。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *file; // ファイルポインタ file = fopen("./test.txt", "w"); // ファイルが開けない場合は異常終了 if (file==NULL) { printf("Can not open a file...\n"); exit(1); } fprintf(file, "Hello Fisrt World!\n"); fprintf(file, "Hello Second World!\n"); fclose(file); return 0; }
読み込み
file = fopen("./test.txt", "r");
で読み込みモードのファイルポインタ。
1行ごとの読み込み
char * fgets( char *row , int len , FILE *fp );
ファイルポインタfp
から1行、またはlen
バイト読み込んでその先頭アドレスを返す。全行を読み込んだ場合、又はエラー時にNULL(\0)
を返す。
#include <stdio.h> #include <stdlib.h> #define SIZE 256 int main(void) { FILE *file; char row[SIZE]; row[0] = '\0'; // ファイルポインタ file = fopen("./test.txt", "r"); // ファイルが開けない場合は異常終了 if (file==NULL) { printf("Can not open a file...\n"); exit(1); } while (fgets(row, SIZE, file) != NULL) { printf("%s", row); } fclose(file); return 0; }
1文字ごとの読み込み
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *file; int c; file = fopen("test.txt", "r"); if (file == NULL) { printf("can not open file...\n"); exit(1); } while ((c = fgetc(file)) != EOF) { printf("%c", (char)c); } fclose(file); return 0; }
バイナリファイル
書き込み
fopen("test.bin", "wb");
でバイナリファイル書き込みのポインタ。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *file; char data[] = {0x11, 0x1f, 0x21, 0x2f}; file = fopen("test.bin", "wb"); if (file == NULL) { printf("can not open file...\n"); exit(1); } fwrite(data, sizeof(char), sizeof(data), file); fclose(file); return 0; }
読み込み
fopen("test.bin", "rb");
でバイナリファイル読み込み用のポインタ。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *file; char data[4]; int i; file = fopen("test.bin", "rb"); if (file == NULL) { printf("can not open file...\n"); exit(1); } fread(data, sizeof(char), sizeof(data), file); fclose(file); for (i=0; i<sizeof(data); i++) { printf("0x%x ", data[i]); } printf("\n"); return 0; }
読み込みファイルのサイズがわかない場合は、malloc
で動的に読み込みを保存するメモリを確保する。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE* file; long int size; int i; char* data; file = fopen("./test.bin", "rb"); if (file == NULL) { printf("can not open file...\n"); exit(1); } // ファイルサイズの取得 fseek してftell fseek(file, 0, SEEK_END); size = ftell(file); // malloc で動的に配列を生成 data = (char*)malloc(sizeof(char)*(long unsigned int)size); // 先頭に戻り、ファイルを読み込む。 fseek(file, 0, SEEK_SET); fread(data, sizeof(char), (long unsigned int)size, file); fclose(file); for (i=0; i<size; i++) { printf("0x%x ", data[i]); } printf("\n"); free(data); return 0; }