スポンサードリンク
HOME > C言語 > ファイル処理 ランダムの読み書き処理

C言語 - ファイル処理 ランダムの読み書き

このページは、ファイル処理の流れ を読んでおくと
理解しやすくなります。



ファイルの読み込みや書き込みは、ファイルの先頭からじゃなくても処理可能です。

例)ファイルの先頭から20バイト目のデータを読み込みたい。等
例)ファイルの先頭から5バイト目にデータを書き込みたい。等

このような処理をランダム処理と言います。

めんどくさそうですが、実際には、読み込むポイント、
または書き込むポイントを指定してから読み込み、書き込みを行うだけです。

読み込み処理

読み込み用ファイル:text.txt
star123hosi

プログラムファイル:program.c
#include <stdio.h>

void main(void) {
   FILE* fp;
   char ss[5];

   fp = fopen("text.txt", "rb");

   fseek(fp, 0L, SEEK_SET);

   fscanf(fp, "%4c", ss);
   ss[4] = '\0';
   printf("%s\n", ss);

   fseek(fp, 7L, SEEK_SET);
   fscanf(fp, "%4c", ss);
   ss[4] = '\0';
   printf("%s\n", ss);

   fclose(fp);

}


読み込み用ファイル:text.txt を読み込んで、先頭から1〜4文字目、
先頭から8〜11文字目のデータを表示するプログラムです。

のfseek関数では、読み込む位置を指定しています。

第2引数は、第2引数で指定した場所から数えて何番目かを指定します。

第3引数は、ファイルのアクセスする基準点を指定します。

この場合は、SEEK_SET とあるので、ファイルの先頭からという意味。

そして、第2引数は0なので、アクセスする場所を「ファイルの先頭から0番目」

に指定した。と言う事になります。

ファイルの先頭は、1文字目ではなく0文字目から始まります。

そして、のfscanf 関数で、4文字読み込んで、それぞれ表示しています。

この場合は、単に4文字読み込むだけなので、

文字列終端文字(\0)を手動で追加しています。

出力は、以下のようになります。

star
hosi

書き込み処理

書き込み用ファイル:text.txt
star123hosi

プログラムファイル:program.c
#include <stdio.h>

void main(void) {
   FILE* fp;

   fp = fopen("text.txt", "r+");

   fseek(fp, 4L, SEEK_SET);

   fprintf(fp, "%s", "789");

   fclose(fp);

}


書き込み用ファイル:text.txt の5〜7文字目にデータ789を書き込む
プログラムです。

では、ファイルを追加書き込み用モードでオープンしています。

ファイル内容は捨てずに読み書き可能なモードです。

なぜ"r+"なのかは分かりませんが、そういう仕様になっています。

続いてで、書き込む位置を指定しています。

この場合は、ファイルの先頭から4番目と言う事になります。

で、指定された書き込み位置からデータ 789 を書き込んでいます。

プログラム終了後のファイルの中身は、以下のようになります。

star789hosi



スポンサードリンク







HOME

言語解説編
プログラミング用語・知識

C言語

C++言語

Java

C#

Visual Basic.NET

アプリケーション編
C言語による
コンソールプログラミング




Copyright (C) プログラミングランド All Rights Reserved