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