简体   繁体   中英

Saving data with a file name of my choice

Very kindly, an intelligent member of stack overflow showed me how to loop with 'Do Until' and generate messages boxes to enable a user to save a file or rename one, if it already exists. However, I'm still hitting a wall. I can't save the ListView data in my for loop, with the file name I have chosen in the Input Box (see code below). Its like I have two separate pieces of code because rtb is saving data in a Rich Text File called Test.txt and saveFile has nothing to do with this! Please help

Code

 Dim fileSaved As Boolean

    Do Until fileSaved
        Dim saveFile As String = InputBox("Enter a file name to save this message")
        If saveFile = "" Then Exit Sub
        Dim docs As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments
        Dim filePath As String = IO.Path.Combine(docs, "Visual Studio 2013\Projects", saveFile & ".txt")

            fileSaved = True
            If My.Computer.FileSystem.FileExists(filePath) Then
                Dim msg As String = "File Already Exists. Do You Wish To Overwrite it?"
                Dim style As MsgBoxStyle = MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton2 Or MsgBoxStyle.Critical
                fileSaved = (MsgBox(msg, style, "Warning") = MsgBoxResult.Yes)
            End If
        Loop

        'THIS NEXT bit of code saves content to Test.txt NOT saveFile as desired!

        Dim rtb As New RichTextBox
        rtb.AppendText("Generation, Num Of Juveniles, Num of Adults, Num of Semiles, Total" & vbNewLine)
        For Each saveitem As ListViewItem In ListView1.Items
            rtb.AppendText(
                           saveitem.Text & ", " &
                           saveitem.SubItems(1).Text & ", " &
                           saveitem.SubItems(2).Text & ", " &
                           saveitem.SubItems(3).Text & ", " &
                           saveitem.SubItems(4).Text & vbNewLine)
        Next
        rtb.SaveFile("C:\Users\SMITH\Documents\Visual Studio 2013\Projects\Test.txt", _
        RichTextBoxStreamType.PlainText)

When you try to save the file with the RichTextBox method SaveFile you need to be able to use the variable filePath that receive the input from your user. But this variable is declared inside the block Do Until .... Loop and according to scope rules of variables in VB.NET is not available outside that block. You could move the declaration of the variable before entering the loop

Dim fileSaved As Boolean

Dim filePath As String 
Do Until fileSaved
    Dim saveFile As String = InputBox("Enter a file name to save this message")
    If saveFile = "" Then Exit Sub
    Dim docs as String = My.Computer.FileSystem.SpecialDirectories.MyDocuments
    filePath = IO.Path.Combine(docs, "Visual Studio 2013\Projects", saveFile & ".txt")

    fileSaved = True
    If My.Computer.FileSystem.FileExists(filePath) Then
        Dim msg As String = "File Already Exists. Do You Wish To Overwrite it?"
        Dim style As MsgBoxStyle = MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton2 Or MsgBoxStyle.Critical
        fileSaved = (MsgBox(msg, style, "Warning") = MsgBoxResult.Yes)
    End If
Loop

' The remainder of your code can be left unchanged until the SaveFile line

Now you could use it in the call

 rtb.SaveFile(filePath, RichTextBoxStreamType.PlainText)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM