ファイルから1行ずつ読み込む/書き込む


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

void main( int argc, char *argv[] )
{
 FILE *fpIn, *fpOut;
 char str[256];

 // 引数チェック
 if ( argc != 3 ) {
  printf( "引数の数が違います\n" );
  exit( 1 );
 }

 // ファイルオープン
 if ( ( fpIn = fopen( argv[1], "r" ) ) == NULL ) {
  printf( "入力ファイルがオープンできません\n" );
  exit( 1 );
 }
 if ( ( fpOut = fopen( argv[2], "w" ) ) == NULL ) {
  printf( "出力ファイルがオープンできません\n" );
  exit( 1 );
 }

 // メイン処理
 while ( ( fgets( str, 256, fpIn ) ) != NULL )
  fputs( str, fpOut );

 // ファイルクローズ
 fclose( fpIn );
 fclose( fpOut );
}


fgetsは改行を取り除かずに入力し、
fputsは改行を付けずに出力します。

改行文字を削除するには

str[ strlen( str ) - 1 ] = '\0';
または
*( str + strlen( str ) -1 ) = '\0';


とします。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

ファイルから1データずつ読み込む/書き込む


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

void main( int argc, char *argv[] )
{
 FILE *fpIn, *fpOut;
 int data, sum = 0;

 // 引数チェック
 if ( argc != 3 ) {
  printf( "引数の数が違います\n" );
  exit( 1 );
 }

 // ファイルオープン
 if ( ( fpIn = fopen( argv[1], "r" ) ) == NULL ) {
  printf( "入力ファイルがオープンできません\n" );
  exit( 1 );
 }
 if ( ( fpOut = fopen( argv[2], "w" ) ) == NULL ) {
  printf( "出力ファイルがオープンできません\n" );
  exit( 1 );
 }

 // メイン処理
 while ( ( fscanf( fpIn, "%d", &data ) ) != EOF )
  sum += data;

 fprintf( fpOut, "合計:%d", sum );

 // ファイルクローズ
 fclose( fpIn );
 fclose( fpOut );
}

C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

ファイルから1文字ずつ読み込む/書き込む


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

void main( int argc, char *argv[] )
{
 FILE *fpIn, *fpOut;
 int c;

 // 引数チェック
 if ( argc != 3 ) {
  printf( "引数の数が違います\n" );
  exit( 1 );
 }

 // ファイルオープン
 if ( ( fpIn = fopen( argv[1], "r" ) ) == NULL ) {
  printf( "入力ファイルがオープンできません\n" );
  exit( 1 );
 }
 if ( ( fpOut = fopen( argv[2], "w" ) ) == NULL ) {
  printf( "出力ファイルがオープンできません\n" );
  exit( 1 );
 }

 // メイン処理
 while ( ( c = getc( fpIn ) ) != EOF )
  fputc( c, fpOut );

 // ファイルクローズ
 fclose( fpIn );
 fclose( fpOut );
}

C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

feof

int feof( FILE *fp )

ファイルfpがファイルエンドなら非0を返す。


while ( !feof( fp ) ) {
 c = getc( fp );
 ・・・
}


ファイルfpがファイルエンドでない間、処理を続ける。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

ファイル入出力主要関数一覧

FILE *fi;
FILE *fo;
int a, c;
char str[256];
とした場合

putc1文字書き出しputc( c, fo )
fputc同上fputc( c, fo )
getc1文字読み込みc = getc( fi )
fgetc同上c = fgetc( fi )
fputs1行書き出しfputs( str, fo )
fgets1行読み込みfgets( str, 256, fi )
fprintf書式付き書き出しfprintf( fo, "%d\n", a );
fscanf書式付き読み込みfscanf( fi, "%d", &a );

fgetsの場合、文字列の最後に"\0"が付加されなければならないので
上記の例では読み込めるのは255文字までとなる。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

コマンドライン引数の取得

コマンドラインからの引数を確認するプログラム

#include <stdio.h>

void main( int argc, char *argv[] )
{
 printf( "argc:%d\n", argc );
 for ( int i = 0; i < argc; i++ )
  printf( "argv[ %d ]:%s\n", i, argv[ i ] );
}


以下のような内容の起動用バッチも作成しておきます。

適当.exe 第1引数 第2引数
pause


実行結果

argc:3
argv[ 0 ]:適当.exe
argv[ 1 ]:第1引数
argv[ 2 ]:第2引数


argcはコマンドラインからmain関数へ渡されたすべての引数の数です。
argv[0]はコマンド名そのものを示しています。
"適当.exe"から見た場合、第1引数はargv[1]、第2引数はargv[2]に入ります。

これを利用してファイル入出力処理をコマンドラインから行う事ができます。

ファイルから1文字ずつリードしてディスプレイに表示していくプログラム

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

void main( int argc, char *argv[] )
{
 FILE *fp;
 int c;

 if ( argc != 2 ) {
  printf( "引数の数が違います\n" );
  exit( 1 );
 }
 if ( ( fp = fopen( argv[1], "r" ) ) == NULL ) {
  printf( "入力ファイルがオープンできません\n" );
  exit( 1 );
 }

 while ( ( c = getc( fp ) ) != EOF )
  putchar( c );

 fclose( fp );
}

C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

fclose

int fclose( FILE* fp )

正常の時は0、エラーの場合EOFが返される。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

fopen

FILE* fopen( char* filename, char* openmode )

ファイルが正しくオープンされると、ファイルポインタが返される。
エラーの時はNULLが返される。


FILE *fp;
fp = fopen( "sample.txt", "r" );
・・・
fclose( fp );


fopenのオープンモード
"r"既存ファイルを読み込み。ファイルがないとエラーになる。
"w"既存ファイルに新規書き込み。元の記録内容は消去される。ファイルがない場合は新規作成される。
"a"既存ファイルに追加書き込み。ファイルがない場合は新規作成される。
"r+"既存ファイルに読み込みと書き込み。ファイルがないとエラーになる。
"w+"既存ファイルに新規書き込み。読み込みも可能。ファイルがない場合は新規作成される。
"a+"既存ファイルに追加書き込み。読み込みは先頭から。ファイルがない場合は新規作成される。
"rb"バイナリファイルの読み込み。
"wb"バイナリファイルの新規書き込み。
"ab"バイナリファイルの追加書き込み。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)