トップ->C言語入門

あなたは

人目のC(C++)言語入門受講生です。

C言語入門内検索

目次
C言語入門〜トップ
C++言語入門〜トップ
0. はじめに

1. 基本的な決まり
   1. 書式
   2. 予約語
   3. 構成
   4. データの形と宣言
   5. 定数と変数
   6. 簡単な演算

2. 入出力
   1. printf
   2. scanf
   3. 練習問題1
   4. 1文字入出力
   5. エスケープシーケンス

3. 制御文
   1. 順次構造
   2. 単一分岐
   3. 多重分岐
   4. ケース構造
   5. 反復構造(while)
   6. 反復構造(do)
   7. 反復構造(for)
   8. 補助制御文
   9. 練習問題
   10.練習問題

4. 配列
   1. 配列とは
   2. 配列の宣言と初期化
   3. 配列の使用法
   4. 練習問題
   5. 文字列
   6. 2次配列と多次元配列
   7. 練習問題

5. 演算子
   1. 演算子の種類
   2. インクリメント演算子とデクリメント演算子
   3. 複合代入演算子
   4. ビット演算子
   5. シフト演算子
   6. キャスト演算子
   7. 順次演算子
   8. 条件演算子(三項演算子)
   9. sizeof演算子
   10.演算子の優先順位
   11.式と値
   12.条件式と値
   13.練習問題

6. ポインタ
   1. ポインタとは
   2. 配列とポインタ
   3. 文字列とポインタ
   4. ポインタのメリット

7. 関数
   1. 関数の作り方
   2. プロトタイプ宣言
   3. 配列とポインタ
   4. 値渡しとアドレス渡し
   5. main関数の引数
   6. 練習問題
   7. 標準関数
   8. 再帰関数

8. プリプロセッサ
   1. プリプロセッサとは
   2. #define, #undef
   3. #include
   4. #if
   5. #error、#warning
   6. マクロ
   7. 定義済みマクロ

9. 変数の有効範囲
   1. 変数の種類
   2. グローバル変数の有効範囲
   3. オート変数の有効範囲
   4. スタティック変数の有効範囲

10. 構造体
   1. 構造体とは
   2. 構造体の宣言
   3. 構造体の使用法
   4. 構造体のポインタ
   5. 構造体の構造体
   6. 構造体と関数
   7. 練習問題

11. 共用体
   1. 共用体とは
   2. 共用体の宣言
   3. 共用体の使用法

12. ファイル
   1. ファイル
   2. ファイル構造体
   3. ファイル作成・オープン
   4. ファイル読み込み
   5. ファイル書き込み
   6. ファイルクローズ
   7. ファイルエラー
   8. ランダムアクセス
   9. 標準入出力
   10. 練習問題
   11. ファイルの検索
   12. ファイルの削除
   13. ファイル名変更
   14. ディレクトリ操作

13. 低水準入出力関数
   1. 高水準入出力関数との違い
   2. ファイル作成
   3. ファイルオープン
   4. ファイル読み込み
   5. ファイル書き込み
   6. ファイルクローズ
   7. 標準入出力
   8. ランダムアクセス
   9. ファイルポインタとファイルディスクリプタ
   10. 練習問題

14. データ構造
   1. データ構造とは
   2. データ構造の種類
   3. 線形リスト
     4. 単方向リスト
     5. 双方向リスト
     6. 環状リスト
   7. ベクター
   8. 木
     9. 二分検索木
   10. スタック
   11. キュー

15 標準関数
   1. 文字分類・文字変換
   2. 文字列操作
   3. データ変換
   4. メモリー操作
   5. 数値演算
   6. ファイル操作(高水準入出力関数)
   7. ファイル操作(低水準入出力関数)
   8. プロセス関係

16 関数ポインタ
   1. 関数ポインタとは
   2. 関数ポインタ
   3. 関数ポインタと引数・戻り値
   4. 関数ポインタの配列

17. そしてその後は (PR)
   1. ヒューマンアカデミー C言語講座
   2. el school C言語講座
   3. C++入門


・ このページの先頭に戻る
・ トップページに戻る


・ このページの先頭に戻る
・ トップページに戻る

トップ-> C言語入門:ファイル-> 12-11. ファイルの検索

←前ページへ :  トップへ :  次ページへ→


12-11.ファイルの検索

  ここでは、ワイルドカードを用いたファイルの検索について解説していきます。ワイルドカードについて 簡単に解説しますと、「*」と「?」のことを言います。「*」は何でも当てはまり、「?」は任意の1文字を 表します。

  例えば、「abcdef」「abcd」は「abc*」と表すことができます。「abc001」「abc002」は「abc00?」や「abc???」と 表せますが、「abc11」などは当てはまりません。ただし「abc*」と表せばいずれも当てはまります。詳しい ことは別のサイトを検索してください。

  さて、ワイルドカードを用いてファイルを検索するには、2つの関数を使用します。ひとつは「_findfirst」、 もう1つは「_findnext」です。_findfirstは検索したいファイル名を指定して、その結果を「_finddata_t」構造体に 返します。また、検索のためのハンドルが戻り値として戻ります。

  _findnextでは、_findfirstで帰ってきたハンドルを指定して、「_finddata_t」構造体に結果を返します。 該当するファイルがなくなるまで、_findnextを実行します。

  最後に「_findclose」関数を用いてハンドルを指定してクローズします。

  なお、これら一連の関数を使用するためには「io.h」をインクルードする必要があります。また、 プラットフォーム(OS、コンパイラなど)によって使用できない場合などもあります。

意味
unsigned attribファイルの属性
詳細は下記のサンプルを参照してください。
time_t time_createファイルの作成時刻
(FAT ファイル システムでは -1L)
time_t time_accessファイルを最後にアクセスした時間
(FATファイル システムでは -1L)
time_t time_writeファイルに最後に書き込んだ時刻
_fsize_t sizeバイト単位でのファイルの長さ
char name[_MAX_FNAME]一致したファイルおよびディレクトリの名前を表すASCIIZ文字列
(パス名は付きません)

関数名 _findfirst
書式 long _findfirst( char* filespec, _finddata_t* fileinfo )
戻り値 -1=エラー(ファイルが見つからない、もしくは無効なターゲットを指定した)
-1≠検索のためのハンドル
機能 第一引数の渡されたターゲットファイル名を検索し、
その結果を第二引数で渡された構造体に入れる。

関数名 _findnext
書式 int _findnext( long handle, _finddata_t* fileinfo )
戻り値 -1=エラー(ファイルが見つからない)
0=この関数が成功した
機能 第一引数に_findfirstで返されたハンドルを指定し、
次に一致するファイルを検索し、その結果を第二引数で渡された構造体に入れる。

関数名 _findclose
書式 int _findclose( long handle )
戻り値 -1=エラー(ファイルが見つからない)
0=この関数が成功した
機能 第一引数に_findfirstで返されたハンドルを指定し、
検索のためのハンドルをクローズし、使用していたりソースを解放します。

下にCドライブのファイルを表示するプログラム例を示します。

#include <stdio.h>
#include <io.h>
#include <time.h>

void main( void ){
    struct _finddata_t c_file;
    long   hFile;

    // カレント ディレクトリ内の最初のファイルを探します。
    if( (hFile = _findfirst( "*.*", &c_file )) == -1L )
       printf( "カレント ディレクトリにはファイルは存在しません。\n" );
    else{
        printf( "ファイルのリスト\n\n" );
        printf( "RDO HID SYS ARC  FILE         DATE %25c SIZE\n", ' ' );
        printf( "--- --- --- ---  ----         ---- %25c ----\n", ' ' );
        printf( ( c_file.attrib & _A_RDONLY ) ? " Y  " : " N  " );
        printf( ( c_file.attrib & _A_SYSTEM ) ? " Y  " : " N  " );
        printf( ( c_file.attrib & _A_HIDDEN ) ? " Y  " : " N  " );
        printf( ( c_file.attrib & _A_ARCH )   ? " Y  " : " N  " );
        printf( " %-12s %.24s  %9ld\n", c_file.name, ctime( &( c_file.time_write ) ), c_file.size );

        // 残りのファイルを探します
        while( _findnext( hFile, &c_file ) == 0 ){
            printf( ( c_file.attrib & _A_RDONLY ) ? " Y  " : " N  " );
            printf( ( c_file.attrib & _A_SYSTEM ) ? " Y  " : " N  " );
            printf( ( c_file.attrib & _A_HIDDEN ) ? " Y  " : " N  " );
            printf( ( c_file.attrib & _A_ARCH )   ? " Y  " : " N  " );
            printf( " %-12s %.24s  %9ld\n", c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
        }

       _findclose( hFile );
    }
}

RDO HID SYS ARC  FILE         DATE                           SIZE
--- --- --- ---  ----         ----                           ----
 N   Y   Y   Y   boot.ini     Sun May 16 00:55:51 2004        204
 Y   Y   Y   Y   bootfont.bin Mon Aug 27 21:00:00 2001     132398
 N   N   N   N   Documents and Settings Tue Jul 08 23:13:45 2003          0
 N   N   N   N   jdk1.1.8     Thu Feb 21 22:20:02 2002          0
 Y   Y   Y   Y   NTDETECT.COM Sun Oct 13 13:38:23 2002      47580
 Y   Y   Y   Y   ntldr        Sun Oct 13 13:38:23 2002     244384
 N   Y   Y   Y   pagefile.sys Sat Jun 11 18:53:37 2005  603979776
 Y   N   N   N   Program Files Sun Jun 12 01:59:29 2005          0
 N   Y   Y   N   RECYCLER     Sun Apr 24 07:34:14 2005          0
 N   Y   Y   N   System Volume Information Wed Feb 13 23:26:46 2002          0
 N   N   N   N   WINDOWS      Mon May 23 01:12:10 2005          0
 N   N   Y   N   WUTemp       Sat Nov 15 16:23:08 2003          0


←前ページへ :  トップへ :  次ページへ→