Vb.net SaveFileDialog.OpenFile()索引自动失效异常
我最近写了一些与菜单条相关的代码,其中有一个选项包含OpenFile、SaveFile和Exit等。下面是代码Vb.net SaveFileDialog.OpenFile()索引自动失效异常,vb.net,indexoutofboundsexception,savefiledialog,Vb.net,Indexoutofboundsexception,Savefiledialog,我最近写了一些与菜单条相关的代码,其中有一个选项包含OpenFile、SaveFile和Exit等。下面是代码 Dim myStream As Stream Dim saveFileDialog1 As New SaveFileDialog() saveFileDialog1.Filter = "ebd files (*.txt)|*.txt" saveFileDialog1.FilterIndex = 2 saveFileDialog1.RestoreDirector
Dim myStream As Stream
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "ebd files (*.txt)|*.txt"
saveFileDialog1.FilterIndex = 2
saveFileDialog1.RestoreDirectory = True
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
Try
myStream = saveFileDialog1.OpenFile()
If (myStream IsNot Nothing) Then
' Code to write the stream goes here.
Dim sw As New StreamWriter(myStream)
sw.Flush()
sw.Close()
myStream.Close()
End If
Catch Ex As Exception
MessageBox.Show("Can't save file on disk: " & Ex.Message)
End Try
End If
另一段代码完全相同,但没有If语句,如下所示
Dim myStream As Stream
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "ebd files (*.txt)|*.txt"
saveFileDialog1.FilterIndex = 2
saveFileDialog1.RestoreDirectory = True
Try
myStream = saveFileDialog1.OpenFile()
If (myStream IsNot Nothing) Then
' Code to write the stream goes here.
Dim sw As New StreamWriter(myStream)
'some sw.WriteLine code here...
sw.Flush()
sw.Close()
myStream.Close()
End If
Catch Ex As Exception
MessageBox.Show("Can't save file on disk: " & Ex.Message)
End Try
我遇到的问题是第二段代码,当它运行时,系统将抛出索引超出范围异常,如何在不使用If语句的情况下修复它?是否有任何方法可以显示对话框窗口?有人能告诉我关于这个索引错误消息的线索吗?谢谢 查看OpenFile的源代码可以发现可能的错误点
public Stream OpenFile()
{
IntSecurity.FileDialogSaveFile.Demand();
string str = base.FileNamesInternal[0];
if (string.IsNullOrEmpty(str))
{
throw new ArgumentNullException("FileName");
}
Stream stream = null;
new FileIOPermission(FileIOPermissionAccess.AllAccess, IntSecurity.UnsafeGetFullPath(str)).Assert();
try
{
stream = new FileStream(str, FileMode.Create, FileAccess.ReadWrite);
}
finally
{
CodeAccessPermission.RevertAssert();
}
return stream;
}
代码似乎试图获取base.FileNamesInternal[0]代码>但如果不显示对话框或选择文件名来保存此内部数组,则该数组可能为空
我试图读取属性文件名中索引为0的项,但得到了相同的错误
string file = saveFileDialog1.FileNames(0) ' Index out of range....
我想听听我们WinForms更有经验的海报,如果这真的是看起来的那样,我想我对您试图实现的目标有点困惑
在第二个示例中,似乎从未“显示对话框”,即saveFileDialog1.ShowDialog()
因此,用户无法选择文件/路径
然后尝试使用尚未设置的文件/路径
如果您只需要打开任意文件进行写入,而不向用户显示对话框,为什么不使用file.open()或其他方法呢
异常很可能是在我们看不到的代码中抛出的。您需要发布异常的堆栈跟踪。