locked
Silverlight4でOpenFileDialogにて特定の文字列で始まるファイルのみ表示したい RRS feed

  • 質問

  • OpenFileDialogで表示されるファイルを"TEST"から始まるファイルのみ表示したい場合、どのようにすればよいか教えてください。

    Silverlight3では、次のとおり設定することで実現していました。

                OpenFileDialog OpenFileDlg = new OpenFileDialog();
                OpenFileDlg.Filter = "Test File(TEST*.txt)|TEST*.txt";
                if (OpenFileDlg.ShowDialog() != false)
                {
                    FileName.Text = OpenFileDlg.File.Name;
                }

    しかし、VisualStudioのSilverlightビルドオプションの「対象のSilverlightバージョン」を「Silverlight 4」に変更すると上記コードを実行すると「ファイル フィルターの形式が無効です」というエラーが発生します。

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

     

     

     

    2011年5月19日 3:07

回答

  • フィルター パターンは、ダイアログ ボックスにどのファイルを表示するかを決定します。同じ説明のフィルター パターンは、セミコロン (;) で区切ります。厳密な文字列を指定するか、またはワイルドカード文字 (*) とピリオド (.) の組み合わせを使用して、一致するファイル名または拡張子を指定できます。

    とありますので、TEST* は、許されていないと解釈して良いのではないでしょうか。

    本筋からはずれますが、この文脈において、"TEST*.txt" が許されないと解釈する理由に納得がいきませんでした。
    "TEST*.txt" は厳密な文字列ではありませんが、ワイルドカードとピリオドを組み合わせた一致するファイル名ではありませんか?

     

    さて、英語版のドキュメントに気にかかる記述がありました。
    http://msdn.microsoft.com/en-us/library/system.windows.controls.openfiledialog.filter(v=vs.95).aspx
    "Silverlight 4 requires the wildcard character in the extension portion of the filter. Not using one will cause an exception"

    Silverlight 4 で仕様が変わったようですね。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク F_Terry 2011年5月23日 2:03
    2011年5月20日 14:07

すべての返信

  • こんにちは。

    MSDN(http://msdn.microsoft.com/ja-jp/library/system.windows.controls.openfiledialog.filter(VS.95).aspx)を見ると

    フィルター パターンは、ダイアログ ボックスにどのファイルを表示するかを決定します。同じ説明のフィルター パターンは、セミコロン (;) で区切ります。厳密な文字列を指定するか、またはワイルドカード文字 (*) とピリオド (.) の組み合わせを使用して、一致するファイル名または拡張子を指定できます。

    とありますので、TEST* は、許されていないと解釈して良いのではないでしょうか。


    K.Oumi
    2011年5月20日 5:33
  • こんにちは。
    で、VBですみませんが、クエリーしちゃうとどうでしょうか…
            Dim opf As New OpenFileDialog
            opf.Filter = "Test File(TEST*.txt)|*.txt"
            opf.Multiselect = True
            opf.ShowDialog()
            Dim q = From x In opf.Files Where x.Name Like "TEST*" Select x.Name
            For Each n In q
                MessageBox.Show(n)
            Next

    K.Oumi
    2011年5月20日 5:50
  • フィルター パターンは、ダイアログ ボックスにどのファイルを表示するかを決定します。同じ説明のフィルター パターンは、セミコロン (;) で区切ります。厳密な文字列を指定するか、またはワイルドカード文字 (*) とピリオド (.) の組み合わせを使用して、一致するファイル名または拡張子を指定できます。

    とありますので、TEST* は、許されていないと解釈して良いのではないでしょうか。

    本筋からはずれますが、この文脈において、"TEST*.txt" が許されないと解釈する理由に納得がいきませんでした。
    "TEST*.txt" は厳密な文字列ではありませんが、ワイルドカードとピリオドを組み合わせた一致するファイル名ではありませんか?

     

    さて、英語版のドキュメントに気にかかる記述がありました。
    http://msdn.microsoft.com/en-us/library/system.windows.controls.openfiledialog.filter(v=vs.95).aspx
    "Silverlight 4 requires the wildcard character in the extension portion of the filter. Not using one will cause an exception"

    Silverlight 4 で仕様が変わったようですね。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク F_Terry 2011年5月23日 2:03
    2011年5月20日 14:07
  • Azulean様、K.Oumi様

    ご回答ありがとうございます。

    Silverlight4で仕様が変更されたため、上記のコードでは動作しないことは理解できました。

    Silverlight4で、タイトルに明記してますファイル選択ダイアログに特定の文字列で始まるファイルのみ表示するにはどのようにすればよいでしょうか?

    現状、すべてのファイルを表示し、選択後に該当するファイルかをチェックしようと考えていますが、使い勝手が非常に悪いので何とかしたいと考えています。

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

    2011年5月23日 2:10
  • Silverlight4で、タイトルに明記してますファイル選択ダイアログに特定の文字列で始まるファイルのみ表示するにはどのようにすればよいでしょうか?
    現状、すべてのファイルを表示し、選択後に該当するファイルかをチェックしようと考えていますが、使い勝手が非常に悪いので何とかしたいと考えています。

    公的な方法が仕様変更で失われたのであれば、方法はないのかもしれません。
    (横取りする、API を直接使用するという方法は Silverlight の普通の状態では使えないでしょうから)

    ほかに類似の操作性を実現するコンポーネントなどがあれば別ですが、Silverlight の性質上、打つ手なしな予感がします。
    もちろん、私自身が Silverlight に詳しくないので、見えてないだけかもしれませんが。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年5月23日 14:35
  • こんにちは。

    もし、信頼されたアプリケーションとして実行(ブラウザ外実行)が可能であれば、

    Directory.EnumerateFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "TEST*.txt")

    なんて事が簡単にできるので、子ウィンドウを作り、ダイアログを表示しているように見せかける事ができると思いますが…
    ブラウザ外実行というのがハードルになりそうですね…


    K.Oumi
    2011年5月24日 4:44
  • Azulean様

    コメントありがとうございます。

    当面は、ファイル選択後、ファイル名をチェックしTESTではじまるファイルを選択すよう促すこととします。

    2011年5月25日 4:28
  • K.Oumi様

    コメントありがとうございます。

    ブラウザ外実行はできないので、よいアイデアを頂きましたが、ファイル選択後にファイル名をチェックすることとしたいと思います。

    2011年5月25日 4:30