Как создать текстовый файл и добавить текст в существующий файл?

Я пытаюсь сохранить содержимое textbox1 в текстовый файл на свой компьютер.
Что я хочу сделать, так это создать каталог для сохранения, и когда он будет настроен, я сохраню содержимое textbox1 в этот текстовый файл.
Не один раз я хочу добавить содержимое TextBox в тот же файл после.

Button2: Пытаюсь просмотреть и создать текстовый файл.
Button4 (1-й щелчок): эта кнопка сохранит содержимое textbox1 в созданный текстовый файл.
Button4 (2-й щелчок)": это добавит текущее содержимое textbox1 в тот же текстовый файл.

Но я хочу иметь возможность менять каталог, когда захочу.
Я также хочу выбрать путь вне кода или вне текстового поля.
Это означает, что мне нужна кнопка, которая позволит мне выбрать папку, в которой я хочу создать текстовый файл.
Вторая кнопка позволит мне сохранить содержимое textbox1 в созданный текстовый файл.

Вот часть моего кода, но я не знаю, правильно ли я это делаю, потому что теперь он делает то, что я хочу. Пожалуйста помоги.

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim isave As New SaveFileDialog
        isave.Filter = "txt files (*.txt) |*.txt"
        isave.FilterIndex = 2
        isave.RestoreDirectory = False

        If isave.ShowDialog() = DialogResult.OK Then
            IO.File.WriteAllText(isave.FileName, TextBox1.Text)
        End If
    End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim theText As String
        theText = TextBox1.Text
        IO.File.AppendAllText("isave", Environment.NewLine & theText)
End Sub

2
93
1

Ответ:

Решено

Возможный способ продолжения:

  • Используйте поле (здесь lastSaveFileName), чтобы сохранить путь к последнему сохраненному файлу.
  • Используйте SaveFileDialog, чтобы получить путь к файлу, сохраните результат в lastSaveFileName
    • SaveFileDialog запрашивает подтверждение, если файл уже существует. Пользователь может выбрать, перезаписывать его или нет.
    • Если пользователь решает не перезаписывать существующий файл (следовательно, отменяет операцию), lastSaveFileName устанавливается в пустую строку, поэтому вы не можете добавлять новый текст в этот файл.
      Если это не то поведение, которое вы ожидаете (например, вы хотите сохранить и обновить файл, созданный в предыдущем сеансе), удалите sfd.OverwritePrompt = True и используйте File.AppendAllText() вместо File.WriteAllText()
  • Чтобы обновить выбранный файл, добавив больше текста, используйте ранее сохраненную ссылку lastSaveFileName
    • Если файл не существует (на данный момент) или он никогда не был указан, предложите пользователю сначала создать файл. Вы также можете сохранить путь к файлу в настройках проекта.

Я переименовал кнопки в SaveFile и UpdateFile, а текстовое поле — в TextContent: всегда лучше назначать понятные имена элементам управления.

Объект SaveFileDialog должен быть объявлен с помощью инструкции Using, так как вам нужно избавиться от него, когда он закрыт (окно, показанное с помощью ShowDialog(), не может избавиться от себя. Объявление одноразового объекта с помощью инструкции Using гарантирует, что объект будет удален, даже если тем временем возникает исключение; в большинстве случаев)


Imports System.IO

Private lastSaveFileName As String = String.Empty

Private Sub SaveFile_Click(sender As Object, e As EventArgs) Handles SaveFile.Click
    lastSaveFileName = GetSaveFileName(lastSaveFileName)
    If Not String.IsNullOrEmpty(lastSaveFileName) Then
        File.WriteAllText(lastSaveFileName, TextContent.Text)
    End If
End Sub

Private Sub UpdateFile_Click(sender As Object, e As EventArgs) Handles UpdateFile.Click
    If Not String.IsNullOrEmpty(lastSaveFileName) AndAlso File.Exists(lastSaveFileName) Then
        File.AppendAllText(lastSaveFileName, Environment.NewLine & TextContent.Text)
    Else
        MessageBox.Show(
            Me, "The file has not been created yet [other instructions]",
            "Save file missing", MessageBoxButtons.OK, MessageBoxIcon.Information
        )
    End If
End Sub

Private Function GetSaveFileName(suggestedName As String) As String
    Using sfd As New SaveFileDialog()
        sfd.Filter = "Text Files (*.txt) |*.txt"
        sfd.FileName = suggestedName
        sfd.OverwritePrompt = True
        If sfd.ShowDialog() = DialogResult.OK Then
            Return sfd.FileName
        End If
        Return String.Empty
    End Using
End Function