none
こちらが指定した拡張子を選択されているか判断する RRS feed

  • 質問

  • 皆様こんにちは。

    作りたい動作の設定について

    どうしてもわからない箇所が出ましたので質問します。

     

    Button1(フォルダ選択ボタン)を押すとFolderBrowserDialogを用いてフォルダを選択する様に設定し

    選択したフォルダをtextbox1に表示させる

    そしてButton2(実行ボタン)を押した際に選択したフォルダの中に

    こちらが指定している拡張子(*.txtとします)が含まれていなければ

    エラー文を表示させる動作を作りたいのですが

    どうしてもその方法がうまく出来ません

     

    お分かりになる方、どなたかご教授お願い致します

     

    2006年10月5日 6:18

回答

  • えーと。。。

     if (filechk != "*.txt")

    このプログラムの意味は?

    #*.txtなんて名前のファイルはきっとどこにもないはず。
     なので、この条件判定は必ず真になるんじゃ。。。

    自分だったら、ファイル名で判定するんじゃなくて、取り出されるファイルの数とかで判定するかな。
    その場合は、foreachなんていらないですね。

    2006年10月5日 8:01
  •  sinmai さんからの引用

     if (filechk != "*.txt")


    が違うのでは?
    もし、拡張子が "txt" のファイルがあった場合、ワイルドカードではなくパスが入っているはずです。
    比較するのであれば、for eachの前で filechk を 初期化しておいて、パス文字列が入っているかどうかチェックする感じなのでは。

    それか、for each を回る前に、System.IO.Directory.GetFiles(path, pattern)の結果を先に取得しておいて、サイズをチェックして、0ならないってことにすればいいでしょう。

    2006年10月5日 8:04

すべての返信

  • フォルダは指定されているのでしょうから、そこに含まれているファイルをすべて取り出して、そのファイルの拡張子を指定しているものと比較していけばいいと思うのですが。
    どこがうまくいかないのでしょうか。
    2006年10月5日 7:06
  • Directory.GetFiles メソッド (String, String) 

    指定したディレクトリ内の指定した検索パターンに一致するファイル名を返します。

    これじゃダメなの?

    2006年10月5日 7:11
  • ご返答ありがとうございます。

            public string filechk;

            //実行ボタンを押した際の処理
            private void button2_Click(object sender, EventArgs e)
            {
                //指定したフォルダ内のすべてのファイルを取得する
                string path = textBox1.Text;
                string pattern = "*.txt";
                foreach (string File in
                    System.IO.Directory.GetFiles(path, pattern))
                {
                    filechk = File;
                }
                    //対象データがない場合の処理

                    if (filechk != "*.txt")
                    {
                        MessageBox.Show("対象データ(.txt)が存在しません", "選択エラー",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                    }

       }

     こういった形でテストを行ったところ txtファイルが入っているフォルダを選択してもエラーが出てしまうのです。ファイル習得する所がちゃんと認識されていないんでしょうか・・・

    2006年10月5日 7:41
  • お返事ありがとうございます。

    それを使ってはいるんですけどうまく反映されていないのでしょうか

    2006年10月5日 7:54
  • えーと。。。

     if (filechk != "*.txt")

    このプログラムの意味は?

    #*.txtなんて名前のファイルはきっとどこにもないはず。
     なので、この条件判定は必ず真になるんじゃ。。。

    自分だったら、ファイル名で判定するんじゃなくて、取り出されるファイルの数とかで判定するかな。
    その場合は、foreachなんていらないですね。

    2006年10月5日 8:01
  •  sinmai さんからの引用

     if (filechk != "*.txt")


    が違うのでは?
    もし、拡張子が "txt" のファイルがあった場合、ワイルドカードではなくパスが入っているはずです。
    比較するのであれば、for eachの前で filechk を 初期化しておいて、パス文字列が入っているかどうかチェックする感じなのでは。

    それか、for each を回る前に、System.IO.Directory.GetFiles(path, pattern)の結果を先に取得しておいて、サイズをチェックして、0ならないってことにすればいいでしょう。

    2006年10月5日 8:04
  •         //実行ボタンを押した際の処理
            private void button2_Click(object sender, EventArgs e)
            {
                //指定したフォルダ内のすべてのファイルを取得する
                string path = textBox1.Text;
                string pattern = "*.txt";
                string[] filechk = System.IO.Directory.GetFiles(path, pattern));

                    //対象データがない場合の処理

                    if (filechk.Length == 0)
                    {
                        MessageBox.Show("対象データ(.txt)が存在しません", "選択エラー",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                    }

       }

    配列宣言してファイル数で判定させたところ思惑通りに動作しました。

    どっとねっとふぁん様、青の洞窟様、かめたろ様ありがとうございました。

    2006年10月5日 8:49