我很抱歉这个奇怪的标题。我正在开发一个 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))
"。
如何清除这些问题?? :)
两件小事:
您在显示对话框后设置过滤器,从而使过滤器无用
您应该将 using 块包装在if 上以查看用户是否取消了操作(对话框的 FileName 属性保持为空),并将 readToEnd 调用包装在 try - catch 块上以防万一
这些是我的快速2美分