StreamWriter 即使没有保存也会留下文件

Posted

技术标签:

【中文标题】StreamWriter 即使没有保存也会留下文件【英文标题】:StreamWriter leaving a file even if not saved 【发布时间】:2014-02-02 22:38:21 【问题描述】:

我有这段代码可以将文本框中的一些数据写入文本文件。我正在使用 streamwriter 来做到这一点。在这里你可能会看到下面的代码:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim Save As New SaveFileDialog()
        Dim myStreamWriter As System.IO.StreamWriter
        Save.Filter = "Text [*.txt*]|*.txt|All Files [*.*]|*.*"
        Save.CheckPathExists = True
        Save.Title = "Export & Save - FNG"
        Save.FileName = txtTitle.Text & " - Plugs Details File Exported"
        Save.ShowDialog(Me)
        Try

            myStreamWriter = System.IO.File.AppendText(Save.FileName)
            myStreamWriter.Write("Details of Plugs:" & Environment.NewLine & txtDetails.Text & Environment.NewLine & DateAndTime.Now)
            myStreamWriter.Flush()
        Catch ex As Exception
        End Try


    End Sub

代码运行良好,它也将详细信息保存到文本文件中。但问题是当我取消保存文件对话框(不保存文本文件)时,它仍然在应用程序启动路径中创建一个文件。为什么会这样?我究竟做错了什么?我该如何纠正这个问题?

【问题讨论】:

永远不要这样使用 Try/Catch。您只是忽略了任何异常,但是任何可能导致异常的问题都不会消失!此外,您将不知道这些问题是什么,因为您忽略了它们! @JohnSaunders 我删除了 Try/Catch 并进行了调试,但仍然没有弹出任何错误,但即使我不保存文件,文件仍然会保存(即使我关闭了保存文件对话框) :/ 看我的回答:为什么你认为取消保存会让你的 Sub 返回? 此外,正如您在代码中看到的,我使用的保存对话框文件扩展名是*.txt",但是在我关闭保存文件对话框而不保存后正在创建的文件没有任何扩展。它会创建一个像这样的文件gyazo.com/cf1c560a8934f8bf5979c30cef26bd28.png 【参考方案1】:

试试

If Save.ShowDialog(Me) <> DialogResult.Ok Then Return

取消对话框不会自动让您的 Sub 返回!

此外,您使用 StreamWriter 错误。使用

Using myStreamWriter As System.IO.StreamWriter = System.IO.File.AppendText(Save.FileName)
        myStreamWriter.Write("Details of Pish flaps:" & Environment.NewLine & txtDetails.Text & Environment.NewLine & DateAndTime.Now)
End Using

并删除StreamWriterDim。这将确保StreamWriter 即使抛出异常也会关闭。

【讨论】:

我终于解决了问题。都感谢你。 :)

以上是关于StreamWriter 即使没有保存也会留下文件的主要内容,如果未能解决你的问题,请参考以下文章

即使有足够的空间可用于单词,UILabel 自动换行功能也会留下空间

即使没有保存上下文,NSFetchedResultsController 委托也会触发

c#每200个循环后保存Streamwriter而不关闭

谁能告诉为啥在使用 StreamWriter 保存数据时仍然显示以前的数据

关闭窗体后,利用StreamWriter保存控件里面的数据

该进程无法访问该文件,因为它正被另一个进程 Streamwriter 使用