0

変なタイトルでごめんなさい。ボタンをクリックしてシステムからテキストファイルをロードし、ファイルの内容を読み取り、テキストファイルの内容をテキストボックスに表示することになっているWPFアプリに取り組んでいます。

私は次のことをしました:

XAMl:

<TextBox Grid.Column="2" Text="{Binding Path=WriteMessage, Mode=TwoWay}" Name="MessageWrite" />
<Button Content="Load" Command="{Binding Path=LoadFileCommand}" Name="button8" />

ViewModelクラス:

    // Method gets called when LOAD Button is Clicked
    private void ExecuteLoadFileDialog()
    {
        FileReader mFile = new FileReader(); // Its a Class Which Reads The File

        var dialog = new OpenFileDialog { InitialDirectory = _defaultPath };
        dialog.ShowDialog();
        dialog.DefaultExt = ".txt";
        dialog.Filter = "Text Files(*.txt)|*.txt|All(*.*)|*";
        string path;
        path = dialog.FileName;

        using (StreamReader sr = new StreamReader(path)) 
        {
            WriteMessage = sr.ReadToEnd();
        }            
    }

ファイルリーダークラス:

class FileReader : I2CViewModel.IFileReader
{
    public string Read(string filePath)
    {
        byte[] fileBytes = File.ReadAllBytes(filePath);
        StringBuilder sb = new StringBuilder();
        foreach (byte b in fileBytes)
        {
            sb.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
        }
        return sb.ToString();
    }
}

ここで直面している問題は、ロードボタンをクリックするとファイルダイアログが開きますが、.Txtファイルだけでなくすべてのファイルが表示されることです。.txtファイルのみが表示されるようにするにはどうすればよいですか?

次に、ボタンをクリックするとダイアログがポップアップし、キャンセルボタンをクリックすると、アプリケーションがクラッシュして「空のパス名は無効です」と表示されます。を指しているusing (StreamReader sr = new StreamReader(path))

これらの問題を解決するにはどうすればよいですか?:)

4

1 に答える 1

1

2つの簡単なこと:

ダイアログを表示した後にフィルターを設定しているため、フィルターが役に立たなくなります

ユーザーが操作をキャンセルしたかどうかを確認するために(ダイアログのFileNameプロパティは空のまま)、ifでusingブロックをラップし、万が一の場合に備えて、try-catchブロックでreadToEnd呼び出しをラップする必要があります。

それらは私の速い2セントです

于 2012-10-09T06:05:57.273 に答える