【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.19941

ディレクトリの中のファイルすべてを読むには
投稿者---ZA/ZA(2005/02/14 21:19:28)


ある指定のディレクトリの中のファイルすべてを読むにはどうしたらいいのでしょうか?
ファイル名が分かっていれば簡単ですが、ファイル名は分かりません。
分かっているのはファイルが入っているディレクトリのパスだけです。

やり方をご存知のかたは教えてください。
よろしくお願い致します。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ディレクトリの中のファイルすべてを読むには 19943 もぐりん 2005/02/14 21:32:26


No.19943

Re:ディレクトリの中のファイルすべてを読むには
投稿者---もぐりん(2005/02/14 21:32:26)


【掲示板ご利用上の注意】

※環境(OSとコンパイラ)や症状は具体的に詳しく!

を守って再度質問してください。


この投稿にコメントする

削除パスワード

No.19955

Re:ディレクトリの中のファイルすべてを読むには
投稿者---ZA/ZA(2005/02/15 00:18:33)


OSは2000でコンパイラはNET2003コンパイラです。

よろしくお願いいたします


この投稿にコメントする

削除パスワード

No.19956

Re:ディレクトリの中のファイルすべてを読むには
投稿者---Blue(2005/02/15 00:41:06)


FindFirstFileを調べてみてください。

# 環境(OSとコンパイラ)や症状は具体的に詳しく!
# C言語オンリーか否か、Windowsアプリケーションか否か
# SDKかMFCかまで書いておくべきです。



この投稿にコメントする

削除パスワード

No.19957

Re:ディレクトリの中のファイルすべてを読むには
投稿者---ZA/ZA(2005/02/15 08:59:41)


通常のCオンリーで自OS上の指定ディレクトリのファイルを読む。
例えば指定ディレクトリがC:\tempだとすると、その中に入っているファイルを読みたいです。
ファイルはいくつ入っているか分からず、またファイル名も分かりません。
ただ分かっているのは***.txtで拡張子くらいです。***の部分は分かりません。
これらのファイルを読み込むにはどうしたらいいのでしょうか?





この投稿にコメントする

削除パスワード

No.19959

Re:ディレクトリの中のファイルすべてを読むには
投稿者---Craft(2005/02/15 10:49:34)


>通常のCオンリーで自OS上の指定ディレクトリのファイルを読む。
>例えば指定ディレクトリがC:\tempだとすると、その中に入っているファイルを読みたいです。
>ファイルはいくつ入っているか分からず、またファイル名も分かりません。
>ただ分かっているのは***.txtで拡張子くらいです。***の部分は分かりません。
>これらのファイルを読み込むにはどうしたらいいのでしょうか?

なぜ、回答いただいた findfirst を調べないのでしょうか?
VC.NET2003 なら標準で提供されている関数だと思います。

ディレクトリ処理関数は、環境依存度が非常に高いので、あるところで
使えても、別のところでは使えない、ということが起きる場合があります。
Unix系への移植を考慮しているという背景があるなら別ですが・・。


この投稿にコメントする

削除パスワード

No.19960

Re:ディレクトリの中のファイルすべてを読むには
投稿者---Blue(2005/02/15 11:33:34)


FindFirstFileでぐぐればすぐに解決するはずですが。

一番上のサイトはCのサンプルまでのってます。



この投稿にコメントする

削除パスワード

No.19967

Re:ディレクトリの中のファイルすべてを読むには
投稿者---ZA/ZA(2005/02/15 14:43:16)


FindFirstFileは、調べて実際に組んでみたのですが、コンパイルがとおりませんでした。
なので_findfirst関数をつかおうと思います。この関数は自分の環境でも大丈夫でした。
ただ関数の第1引数がどうもヘルプなどを見てもわかりませんでした。
この第1引数はパスだと思うのですが単純にE:\\と指定したのですが、うまくいきませんでした。。。
この第1引数はどのように設定すればいいのでしょうか?


_findfirst(path, &fd);


またディレクトリの中には開けたいファイルは常に1つで拡張子が.txtなので
(そのディレクトリ内に.txtのファイルは常に1つだけ)
fopen(*.txt,"r");とやったらファイルオープンエラーになってしまいました。
Cではこんなことは無理なのでしょうか?



この投稿にコメントする

削除パスワード

No.19971

Re:ディレクトリの中のファイルすべてを読むには
投稿者---Blue(2005/02/15 15:16:48)


>fopen(*.txt,"r");とやったらファイルオープンエラーになってしまいました。
fopenはワイルドカード指定で開きません。

以下サンプルソースです。ファイル名は struct _finddata_t の name に格納されます。
拡張子を指定して検索する場合は szSeartchDir[] = "C:\\*.txt"
みたいに設定します。(txtファイルの場合)

/* Cドライブ直下のファイル名とディレクトリ名を表示する */
#include <stdlib.h>
#include <stdio.h>
#include <io.h>

int main( void )
{
    struct _finddata_t tFileData = { 0 };   /* ファイル情報 */
    long   lHandle;                         /* 検索ハンドル */
    char   szSearchDir[] = "C:\\*.*";       /* 検索ディレクトリ */

    /* ファイル検索開始 */
    lHandle = _findfirst( szSearchDir, &tFileData );

    /* _findfirstが成功した場合 */
    if ( lHandle != -1 )
    {
        do
        {
            /* ファイル(ディレクトリ)名を出力 */
            puts( tFileData.name );
        }
        /* 次のファイルを検索(ない場合はループ終了) */
        while ( _findnext( lHandle, &tFileData ) != -1 );
    }
    /* 検索ハンドルを閉じる */
    _findclose( lHandle );

    /* 終了 */
    return EXIT_SUCCESS;
}




この投稿にコメントする

削除パスワード

No.19972

Re:ディレクトリの中のファイルすべてを読むには
投稿者---Blue(2005/02/15 15:25:14)


ていうか、_findfirstって中でFindFirstFile呼んでますね。(VC++6.0ですが)

>FindFirstFileは、調べて実際に組んでみたのですが、コンパイルがとおりませんでした。
>なので_findfirst関数をつかおうと思います。この関数は自分の環境でも大丈夫でした。

うーむ、FindFirstFileの指定の仕方が悪かったのかな。
実際に表示してもらえば解決しそうだが。。。




この投稿にコメントする

削除パスワード

No.19974

Re:ディレクトリの中のファイルすべてを読むには
投稿者---ZA/ZA(2005/02/15 15:36:29)


ありがとうございます。

いろいろ調べた結果,以下の方法でうまくいきました。



struct _finddata_t fd;

findfirst("C:\\*.txt*", &fd);

ここで取得できた場合fd.nameにファイル名が入ることになる。

また確認後は_findclose関数にてクローズをする。




ネット上にあったFindFirstFileのサンプルをそのままコピーして試してみたのですが、
ヘッダーファイルが開けませんという種のエラーが出てしまいた。


この投稿にコメントする

削除パスワード

No.19975

Re:ディレクトリの中のファイルすべてを読むには
投稿者---Blue(2005/02/15 15:55:06)


>ネット上にあったFindFirstFileのサンプルをそのままコピーして試してみたのですが、
>ヘッダーファイルが開けませんという種のエラーが出てしまいた。

FindFirstFile はWin32 APIなので #include <windows.h> 
を記述しないといけません。 



この投稿にコメントする

削除パスワード

No.19976

Re:ディレクトリの中のファイルすべてを読むには
投稿者---さとみ飯店(2005/02/15 15:57:57)


>ネット上にあったFindFirstFileのサンプルをそのままコピーして試してみたのですが、
>ヘッダーファイルが開けませんという種のエラーが出てしまいた。
コンパイラが言っている通りですね。
MSDNなどには末尾にかならずライブラリ名とヘッダ名が
記載されているかと思います。


この投稿にコメントする

削除パスワード

No.19977

訂正
投稿者---Blue(2005/02/15 17:26:51)


_findfirstが失敗した場合の処理で失敗しても
_findcloseを行っています。実行時は問題はないのですが...

ソースの15〜27行目を以下のように変更して置いてください。

    /* _findfirstが失敗した場合 */
    if ( lHandle == -1 )
    {
        return EXIT_FAILURE;
    }
    do
    {
        /* ファイル(ディレクトリ)名を出力 */
        puts( tFileData.name );
    }
    /* 次のファイルを検索(ない場合はループ終了) */
    while ( _findnext( lHandle, &tFileData ) != -1 );

    /* 検索ハンドルを閉じる */
    _findclose( lHandle );




この投稿にコメントする

削除パスワード

No.19978

Re:訂正
投稿者---Blue(2005/02/15 17:35:46)


>_findfirstが失敗した場合の処理で失敗しても
あぅぅ 日本語おかしいですね。こぴぺみすです。スマソ orz

正:_findfinrstが失敗した場合でも




この投稿にコメントする

削除パスワード

No.19958

Re:ディレクトリの中のファイルすべてを読むには
投稿者---通りすがり(2005/02/15 09:00:33)


>OSは2000でコンパイラはNET2003コンパイラです。
>
>よろしくお願いいたします

何がよろしくなの? ようするに丸投げでしょ?
質問なら最低限自分が書いたソースを載せてください。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧