0

我很抱歉这个奇怪的标题。我正在开发一个 WPF 应用程序,我应该通过单击按钮从系统加载文本文件并读取文件的内容并在文本框中显示文本文件的内容。

我做了以下事情:

XAMl:

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

视图模型类:

    // 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

两件快速的事情:

您在显示对话框后设置过滤器,从而使过滤器无用

您应该在 if 上包装 using 块以查看用户是否取消了操作(对话框的 FileName 属性保持为空)并将 readToEnd 调用包装在 try - catch 块上以防万一

这些是我的快速 2 美分

于 2012-10-09T06:05:57.273 回答