【问题标题】:Writing My.Settings to Text File将 My.Settings 写入文本文件
【发布时间】:2014-07-03 15:29:18
【问题描述】:

好的,所以我在写入文本文件、从 My.Settings 中检索值时遇到了一些问题。代码如下。问题是当我检查文本文件时,它只有第一行(代码中只是一个简单的字符串)。

Dim settingsfile As String = Directory.GetCurrentDirectory & "\RapidSend_Settings.txt"
Dim objWriter As New System.IO.StreamWriter(settingsfile, False)
objWriter.WriteLine("This is the introductory line")
For Each strEmail As String In My.Settings.User_Emails 'Specialized.StringCollection
    objWriter.WriteLine("Email " & strEmail)
Next
For Each strHostName As String In My.Settings.User_HostName ' Specialized.StringCollection
    objWriter.WriteLine("Host " & strHostName)
Next
objWriter.WriteLine("End Of File")
objWriter.Close()

这是文本文件在代码之后的样子:

 This is the introductory line
 End Of File

我的问题是有没有人知道问题是什么,或者有其他方法可以做到这一点。 顺便说一句,所有的 My.Settings 都是 Specialized.StringCollection,所以它们包含很多字符串。

【问题讨论】:

  • 在开始处设置断点,查看集合中有多少项。如果那里有项目,代码应该可以工作。但是,在部署时,您可能没有对GetCurrentDirectory 的写入权限,并且会导致异常。最好写到Users... 文件夹。
  • 断点是什么意思?我试过If My.Settings.User_Emails.Count = 0 Then MsgBox("Empty Collection") Else [WRITE TO FILE] End If 还是不行。我确实有访问权限。谢谢
  • msdn.microsoft.com/en-us/library/vstudio/… 它们是调试代码的重要组成部分。 ...而且您可能无法访问CurrentDirectory部署时
  • 我没有收到任何错误。我添加了 msgboxes 来告诉我代码在哪里,它贯穿所有内容。我什至在 For 循环中添加了“MsgBox(strEmail)”,它显示了每个字符串,但它只是不写入文本文件。
  • 在 MySettings 中使用该集合可能也不理想,因为您没有按预期使用它。版本和默认内容与当前内容可能存在问题。请改用emails As New List(Of String)。您添加和迭代它与该集合相同,但它将是 您的 容器,而不是 VB/VS/NET 的容器

标签: vb.net visual-studio-2013 streamwriter my.settings


【解决方案1】:

由于您不再按预期方式使用“设置”,因此最好创建自己的容器并自行管理:

  • 如果没有模块,请向您的应用添加模块
  • 添加Friend settingsList As New List(Of String)

这将创建一个全局字符串集合,您可以将数据添加到其中。它可以是公开的或朋友的。还有其他方法可以做到这一点,但这是最简单的。也为主机创建一个。

添加它们很简单:

settingsList.Add(some_STRING_variable)

然后在App关机中保存:

' get file name to hold the data
Dim file As String
file = System.IO.Path.Combine(Environment.GetFolderPath( _
       Environment.SpecialFolder.ApplicationData),  "myproduct", "settings.txt")
' result will be Users\Appdata.... where data is supposed to go

' open a stream
Using fs As New IO.StreamWriter(file, IO.FileMode.CreateNew)
    Dim n As Integer = 1
    ' loop thru List contents
    For Each s As String In settingsList
        ' ToDo: edit format to fit your needs
        fs.WriteLine(String.Format("{0} = {1}", n.ToString, s))
        n += 1
    Next

End Using         ' close and properly dispose of stream

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 2017-09-27
    • 2018-08-23
    • 1970-01-01
    • 2012-12-08
    • 2016-10-20
    • 2018-06-16
    • 2014-09-09
    相关资源
    最近更新 更多