C言語関係掲示板

過去ログ

No.170.ディレクトリ内のファイルの存在確認


No.1105

ディレクトリ内のファイルの存在確認
投稿者---カイン(2002/02/27 11:43:00)


はじめまして。
カインといいます。

質問なんですが、C言語で標準入力から入力したファイル名のファイルが特定のディレクトリ内(検索対象のディレクトリのパスはソース内に記述)で存在するかどうかを確認するにはどのようにしたらいいのでしょうか?
ファイルが存在すれば、処理をし、存在しなければエラーを返すといったことが
できればと思っています。

お分かりになる方がいらっしゃいましたら教えてください。
宜しくお願い致します。



No.1106

Re:ディレクトリ内のファイルの存在確認
投稿者---B.Smith(2002/02/27 14:18:13)


こんにちは。

find系の関数を使う方法があります。一つだけのファイルの存在をチェックしたいのであれば、findfirstを一回実行すれば出来ます。
ただし、(PCに関して言えば)この関数はOSやコンパイラの種類によって、関数名や引数に違いがありますので、ライブラリリファレンスで確認してみてください。
私が調べた範囲では以下のような状況でした。

・Borland C
findfirst、findnext

・Borland C、MS-C(16bit)、LSI-C試食版
_dos_findfirst、_dos_findnext

・MS-C 32bit(Windows)
_findfirst、_findnext、_findclose
FindFirstFile、FindNextFile、FindClose(Win32 API)

指定されたパスのファイルを「ファイル入出力関数」(openやfopen等)で直接開いてみる、という方法もあります。発見したファイルを、後で開いて処理するのであれば、「開けなかったら、そのファイルは存在しないものと見なす」としても問題無いと思います。



No.1108

Re:ディレクトリ内のファイルの存在確認
投稿者---カイン(2002/02/27 16:09:57)


ありがとうございます。
お答えいただいた
>指定されたパスのファイルを「ファイル入出力関数」(openやfopen等)で直接開いてみる、という方法もあります。

とのことですが、その場合、ディレクトリを指定する方法はどのようになりますか?いろいろ調べてみたり、例を参考にしたのですが、fopenの対象ファイルには単にファイル名だけが入っている例がほとんどです。
「このディレクトリの中にこのファイルがあるかどうか」というように
ディレクトリを指定するにはどうしたら良いのでしょうか?

お分かりになるようでしたら宜しくお願い致します。




No.1111

Re:ディレクトリ内のファイルの存在確認
投稿者---B.Smith(2002/02/27 16:33:54)


fopen等に与えるファイル名はフルパスで指定できます。パスが指定されていないと、カレントディレクトリを参照します。例えば、
(PCの場合の例です)
    fp = fopen("C:\\Sources\\Library\\dos.asm","r");

この場合は"C:\Sources\Library"の中にある"dos.asm"を開く、ということになります。

今回は、ファイル名が標準入力から入力されるということなので、パスとファイル名を合成して、関数fopenに与える形になると思います。
例えば、標準入力から得られたファイル名がバッファBufに格納されるとして、
     /* (使用されているOSが分からなかったので、 */
     /* バッファサイズは適当です)               */
     char    FileName[256+1];
     char    Buf[256+1];
     FILE    *fp;
             ・
             ・
             ・
    /* パスとファイル名の合成(パスはPCの場合の例です)*/
    sprintf(FileName,"C:\\Sources\\Library\\%s",Buf);

    /* オープン */
    fp = fopen(FileName,"r");
    if (fp == NULL){
        (ファイルが見つからなかったか、開けない)
    }




戻る


「初心者のためのポイント学習C言語」 Last modified:2002.03.16
Copyright(c) 2000-2002 TOMOJI All Rights Reserved