【问题标题】:How to implement a SaveFileDialog in my code, where I am using a FileSteam object如何在我使用 FileStream 对象的代码中实现 SaveFileDialog
【发布时间】:2025-12-30 01:20:21
【问题描述】:

所以这是我的方法代码,但我似乎无法弄清楚如何在其中实现保存文件对话框......任何信息或指导都将受到高度赞赏。

Private Sub btSave_Click(sender As System.Object, e As System.EventArgs) Handles btSave.Click
        If (cbPeriod.SelectedItem IsNot Nothing) Then
            Try
                Using connect As New SqlConnection(connectionString)
                    Dim command As New SqlCommand()
                    command.CommandText = selectQuery
                    command.Parameters.AddWithValue("@Period", cbPeriod.SelectedItem.ToString)
                    command.Connection = connect
                    Dim fileName As String
                    fileName = "Data.txt"
                    Dim seqNo As Integer = 0
                    Dim currDocNo As String = ""
                    Dim prevDocNo As String = ""
                    Using FileObject As New FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)
                        Using StreamWriterObj As New StreamWriter(FileObject)
                            connect.Open()
                            Using reader As SqlDataReader = command.ExecuteReader()
                                Dim FieldCount As Integer = reader.FieldCount - 1
                                For i = 0 To FieldCount
                                    StreamWriterObj.Write(reader.GetName(i).ToString)
                                    StreamWriterObj.Write(" @ ")
                                Next
                                StreamWriterObj.WriteLine()
                                Do While reader.Read()
                                    currDocNo = reader.GetValue(reader.GetOrdinal("ДокументNo")).ToString
                                    StreamWriterObj.Write(reader.Item(0))
                                    For i = 1 To FieldCount
                                        currDocNo = reader.GetValue(reader.GetOrdinal("ДокументNo")).ToString
                                        If (reader.GetName(i).Equals("ПореденНомер", StringComparison.InvariantCultureIgnoreCase)) Then
                                            If (currDocNo = prevDocNo) Then
                                                seqNo += 1
                                                StreamWriterObj.Write(seqNo)
                                            Else
                                                seqNo = 1
                                                StreamWriterObj.Write(" @ ")
                                                StreamWriterObj.Write(seqNo)
                                            End If
                                        Else
                                            StreamWriterObj.Write(" @ ")
                                            StreamWriterObj.Write(reader.Item(i))
                                        End If
                                    Next
                                    prevDocNo = currDocNo
                                    StreamWriterObj.WriteLine()
                                Loop
                                reader.Close()
                            End Using
                            connect.Close()
                            MessageBox.Show("Export was successful.")
                        End Using
                    End Using
                End Using
            Catch ex As SqlException
                MessageBox.Show(ex.Message.ToString)
            End Try
        Else
            MessageBox.Show("Please select a value!")
        End If
    End Sub

如果您需要更多信息,请告诉我。如您所见,我有 File 对象和所有内容,所以我想我只需要添加一些 savefiledialog 但是如何将 streamwriter 拥有的数据获取到 savefiledialog 中?

【问题讨论】:

  • 文件对话框中没有任何内容。它只允许用户指定所需的路径和文件名。请阅读How to Ask 并采取tour
  • 不要在包装在 Using 块中的一次性对象上显式调用 Close()。调用 Dispose 方法并为您关闭它@End Using
  • 您也可以摆脱 FileStream 并使用 StreamWriter 来创建文件以及使用this constructor
  • 感谢您的提示。

标签: vb.net filestream streamwriter savefiledialog


【解决方案1】:

使用 SaveFileDialog 获取这样的文件名

Dim fileName As String
' fileName = "Data.txt"
Using sfd As New SaveFileDialog()
    sfd.Filter = "Text Files (*.txt)|*.txt"
    If sfd.ShowDialog() = Windows.Forms.DialogResult.OK Then
        fileName = sfd.FileName
    Else
        Throw New Exception("User canceled out of save dialog")
    End If
End Using

不要在包装在 Using 块中的一次性对象上显式调用 Close()。调用 Dispose 方法并为您关闭它@End Using

最后,您可以删除 FileStream 并使用 StreamWriter 创建文件,也可以使用 this constructor

' Using FileObject As New FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)
' Using StreamWriterObj As New StreamWriter(FileObject)
Using StreamWriterObj As New StreamWriter(path:=fileName, append:=False)

【讨论】:

  • 哇,我以为它会比这更复杂。谢谢你的帮助:)