Arrays 将数据读写到顺序访问文本文件

Arrays 将数据读写到顺序访问文本文件,arrays,visual-studio-2012,io,streamreader,streamwriter,Arrays,Visual Studio 2012,Io,Streamreader,Streamwriter,我的任务是在Microsoft Visual Studio Express 2012中创建一个程序,打开我们创建的文本文件,并读取其中已有的名称列表。程序应该获取名称并将其存储在字符串数组中,然后将其显示在列表框中。还有一个文本框用于向数组中添加名称,当程序关闭时,程序应将名称列表保存在数组中。我的主要问题如下: 如何从数组中获取要在程序启动时显示的名称列表 如何将文本框中的名称添加到已存在的数组中 如何获取数组(带有新名称)并将其保存到文件中 这是一个在线课程,老师从不发电子邮件,我们也没有课

我的任务是在Microsoft Visual Studio Express 2012中创建一个程序,打开我们创建的文本文件,并读取其中已有的名称列表。程序应该获取名称并将其存储在字符串数组中,然后将其显示在列表框中。还有一个文本框用于向数组中添加名称,当程序关闭时,程序应将名称列表保存在数组中。我的主要问题如下:

  • 如何从数组中获取要在程序启动时显示的名称列表

  • 如何将文本框中的名称添加到已存在的数组中

  • 如何获取数组(带有新名称)并将其保存到文件中

  • 这是一个在线课程,老师从不发电子邮件,我们也没有课本,我在网上已经看了一段时间了,所以我来这里看看我能找到什么

    以下是我到目前为止的情况:

    问题1:

    Public Class Form1
    Dim strReader As System.IO.StreamReader
    
    Private Sub lstNames_SelectedIndexChanged(sender As Object, e As EventArgs)     Handles lstNames.SelectedIndexChanged
        strReader = New IO.StreamReader("Names.txt")
        While (strReader.Peek() > -1)
            lstNames.Items.Add(strReader.ReadLine)
        End While
        strReader.Close()
        Dim nameArray() As String = lstNames.Items.OfType(Of String)().ToArray()
    End Sub
    
    问题2:我甚至不知道从哪里开始

    问题3:

    Private Sub saveExit_Click(sender As Object, e As EventArgs) Handles    saveExit.Click
        Dim strWriter As New IO.StreamWriter("Names.txt")
        strWriter.Write(lstNames.Text)
        strWriter.Close()
        Application.Exit()
    End Sub
    
    现在,编写器将只保存文本文件,而不保存任何内容,因为目前我还无法在启动时将名称数组加载到列表框中。谢谢大家的评论,我感谢大家的帮助

    编辑:现在唯一的问题是更新列表框信息没有正确保存数据,它返回为系统。字符串[]以下是代码:

      Private Sub saveExit_Click(sender As Object, e As EventArgs) Handles saveExit.Click
        'this converts all items in listbox into strings, then into an array
        Dim names As String() = lstNames.Items.Cast(Of String)().ToArray()
        'This writes the data to the file
        Dim strWriter As IO.StreamWriter = IO.File.AppendText("Names.txt")
        strWriter.WriteLine(names)
        strWriter.Close()
        Application.Exit()
    End Sub
    

    因为我不知道你的知识水平,让我从头开始

    1a)您从一个
    表单开始
    ,并且有多个控件。您列出的要求是,当程序打开时,您必须读取文件。在VS2012中,在设计器模式下,当您单击窗体的顶部栏时,窗体的属性将显示在属性框中。在属性面板的顶部边缘,您将看到一个闪电图标。单击它将显示所选控件的所有可能事件的列表(在本例中为
    表单
    )。其中一个事件是
    Load
    。如果双击
    Load
    ,它将在代码中为您创建一个新的事件处理程序方法并跳转到它

    这似乎是你第一部分问题的最佳解决方案

    1b)至于从文件中读取列表,我假设该列表是以换行符分隔的?意思是每行上都有一个名字。如果是的话,我建议你看一下。这将非常有帮助

    ReadLines()
    将返回文件中每一行的集合(或列表)。如果每个名称位于不同的行上,则集合中的每个项都将是一个名称

    1c)一旦有了名称集合,就必须将它们添加到
    列表框
    。查看
    列表框中的
    。对你有帮助的两种方法是

    2) 将名称输入列表后,可以继续使用控件上的
    Add()
    来更新
    列表框。您有一个用于输入新名称的
    文本框
    ,我假设有一个按钮实际执行添加操作。同样,
    ListBox
    Items
    属性上的
    Add()
    方法对此也很有用

    3a)要从
    列表框
    中取回行,有几种方法。我最喜欢的是使用
    Linq
    是.NET中轻松处理对象集合的一种方法。需要注意的是
    列表框
    控件
    属性包含
    对象
    类型的集合。对于可视化表示,列表框内部调用每个对象的
    ToString()
    方法。显然,如果集合中的对象恰好是
    String
    类型,那么转换就很容易了。这就是你们这里的情况

    即便如此,你还是需要这个电话

    此行将首先将列表框中的所有项转换为字符串,然后将该列表转换为数组

    3b)最后,您可以使用
    System.IO.file
    类中的

    更新

    这将解决您的问题更新:

    File.AppendText()
    打开一个文件,向其中添加文本。您的文件已经有一些名称,而列表框包含所有名称。这确实不是正确的答案

    另外,因为在您的示例中,
    names
    是一个集合,所以要编写名称,需要循环遍历它们。 注意:最佳做法是对具有
    Dispose()
    方法的对象使用
    Using
    语句。这些对象实现一个名为
    IDisposable
    接口。
    Using
    语句与实现
    IDisposable
    的对象具有特殊关系。它总是确保在调用
    End Using
    行时,释放所有资源

    更好的选择是使用
    File.writeAllines()

    这一行:

  • 打开文件进行写入。如果它不存在,则创建它
  • 名称
    集合中的每个项写入文件中它自己的行
  • 关闭文件

  • 您是否需要使用
    IO.StreamWriter
    库?我已更新了应答系统。保存的字符串[]不是输入的实际名称。写入的代码行是什么?您可以在问题中添加更新,并在此处发表评论。@Stromboli您找到答案了吗?
    Dim line As String() = listbox.Items.Cast(Of String)().ToArray()
    
    Using strWriter As IO.StreamWriter = IO.File.AppendText("Names.txt")
        For Each n As String In names
            strWriter.WriteLine(n)
        Next
        strWriter.Close()
    End Using
    
    IO.File.WriteAllLines("Names.txt", names)