无法取消WPF中的加载文件操作

时间:2012-10-09 05:56:56

标签: c# wpf streamreader fileopendialog

我很抱歉这个奇怪的标题。我正在开发一个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();
    }
}

我在这里面临的问题是,当我点击加载按钮时,它会打开一个filedialog,但它会显示所有文件,而不仅仅显示.Txt文件。如何确保只显示.txt文件?

其次,当我单击按钮时,弹出对话框,如果单击取消按钮,应用程序崩溃显示“空路径名称不合法”。它指向using (StreamReader sr = new StreamReader(path))

我该如何清除这些问题? :)

1 个答案:

答案 0 :(得分:1)

两件快事:

您正在设置过滤器AFTER,显示对话框,从而使过滤器无效

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

那是我的快速2美分

相关问题