2014-02-17 40 views
2

我試圖刪除選定的行,然後將其餘的保存到文件中。但是,當我保存它時,它完全清空文件。我的列表(字符串)正在保存爲system.string(空)

Console.Write("Please eneter the first name of the student you wish to search for: ") 
    searchfname = Console.ReadLine 
    searchfname = StrConv(searchfname, VbStrConv.ProperCase) 
    Console.Write("Please enter the second name of the student you wish to search for: ") 
    searchsname = Console.ReadLine 
    searchsname = StrConv(searchsname, VbStrConv.ProperCase) 
    Dim foundItem() As String = Nothing 
    Dim foundline As String = Nothing 
    Dim fnsearch As String = String.Join(searchfname, searchsname) 
    Dim lines As New List(Of String)(File.ReadAllLines("F:\Computing\Spelling Bee\stdnt&staffdtls.csv")) 
    For Each line As String In lines 
     If searchfname = item(3) And searchsname = item(4) Then 
      Console.WriteLine(line) 
      Console.WriteLine() 
      Console.WriteLine("Are you sure you wish to delete this record? (y/n)") 
     End If 
     Dim answer As String 
     answer = Console.ReadLine 
     If answer = "y" Or answer = "Y" Then 
      Console.Clear() 
      lines.Remove(line) 
      Using sw As New StreamWriter("F:\Computing\Spelling Bee\stdnt&staffdtls.csv") 
       sw.WriteLine(lines.ToString) 
      End Using 
     ElseIf answer = "n" Or answer = "N" Then 
      staffmenu() 
     End If 
    Next 
+0

您沒有正確寫入文件。改爲使用File.WriteAllLines()。 –

+0

這裏有幾個非常好的答案 - 以及以前的7個問題。你應該在他們幫忙時開始接受答案。 – Plutonix

+0

與您的問題無關,而是您對JoeBlogs或Joe Blogs的搜索....如果後者改變您的連接,以便它包含searchfname和searchsname之間的空格 – Mych

回答

2

看這句話在你的代碼:

sw.WriteLine(lines.ToString) 

提取從語句lines.ToString表達。該表達式的結果是「System.String」。您正在告訴流式編寫器將文本「System.String」寫入文件。

要解決它,你需要更多的東西是這樣的:

Using sw As New StreamWriter("F:\Computing\Spelling Bee\stdnt&staffdtls.csv") 
    For Each line As String In lines 
     sw.WriteLine(line) 
    Next line 
End Using 
2

方法List(Of T).ToString不會產生包含集合元素的值。相反,它只會返回類型名稱。

您正在查找的API是File.WriteAllLines。使用這個代替StreamWriterUsing

File.WriteAllLines("F:\Computing\Spelling Bee\stdnt&staffdtls.csv", lines) 
1

我可以看到,這個問題可以從給定的答案和註釋來解決,但我想補充替代使用Join功能寫入文件。試着這樣可能會有所幫助:

Using sw As New StreamWriter(.....) 
    sw.WriteLine(Join(lines.ToArray(), Environment.NewLine)) 
End Using 

由於使用VB.Net,這是不能在C#中使用的vb.net具體的解決方案。對於C#,請改爲使用string.join

希望它也有幫助!

相關問題