使用VB.NET覆盖文本文件中的特定行

时间:2010-01-12 15:30:17

标签: vb.net parsing

我需要做以下事情:

更改文本文件中的行

[Path] = "c:\this\certain\path\"

这一行

[Path] = "c:\that\other\newer\path\"

这些路径肯定会有不同的长度,所以我需要更换引号中的内容或者完全删除该行并输入一个新的,但是在同一个地方,不会附加到文档的末尾。

6 个答案:

答案 0 :(得分:8)

这样就可以了解

    Dim thefile As String = "filepath"
    Dim lines() As String = System.IO.File.ReadAllLines("filepath")

    lines(number of line you want to replace) = "write what you want to replace here"

    System.IO.File.WriteAllLines(filepath, lines)

答案 1 :(得分:3)

如果您确切地知道要替换的行看起来如何并且您正在阅读的文件不是很大,您可以尝试使用Replace()来添加新行而不是旧行:< / p>

Dim reader As New StreamReader("foo.txt")
Dim writer As New StreamWriter("output.txt")

Dim s = reader.ReadToEnd().Replace("[Path]: C:\oldPath\file.txt", "[Path]: C:\newPath")
writer.Write(s)

答案 2 :(得分:1)

将文本文件读入一个字符串,遍历每一行并检查它是否采用以下格式:

[Path] = "...."(使用正则表达式或仅使用string.StartsWith("[Path] = ")

在这个循环中你应该写出所有其他行,当你在这个[Path]行时,打印出修改后的那一行。

所以在代码中(抱歉,它在C#中):

var reader = File.OpenText("foo.txt"); 
var writer = new StreamWriter("output.txt");
string line;
while ((line=reader.ReadLine()) != null)
{
    if (line.StartsWith("[Path]"))
        writer.WriteLine("[Path] = \"c:\\that\\other\\newer\\path\\\"");
    else
        writer.WriteLine(line);
}

当然,关闭并处理StreamReader和StreamWriter。

答案 3 :(得分:1)

这是交易:由于文件存储在磁盘上的方式,你不能写一行而不更新 后面的每一行。

有很多方法可以做到这一点,最适合你情况的方法将取决于文件的大小,你是否对很多文件这样做,你希望在文件中找到这个等等。

但是大多数时候我喜欢做的是创建旧文件的副本......所以当我通过文件寻找我需要改变的行时,我也在写什么我已经读到了一个新的位置。当我找到这条线时,我会写出新的信息。然后我继续搜索文件,直到我到达结束时,我关闭两个流,删除原始文件,并重命名新文件。

答案 4 :(得分:0)

一种快捷的方法是使用readAllLines和WriteAllLines:

Dim ss() As String
ss = File.ReadAllLines([path])
ss(47) = "c:\that\other\newer\path\"
File.WriteAllLines([path], ss)

如果您不知道要更改哪一行,可以在数组中搜索它。

答案 5 :(得分:0)

首先构建一个函数来给出line&#39; n&#39;:

的值
Public Function daValorConfig(ByVal numValor As Long, ByVal nomeFicheiroINI As String) As String
    Dim reader As StreamReader = New StreamReader(Application.StartupPath & "\" & nomeFicheiroINI & ".ini")
    Dim valor As String = ""
    daValorConfig = ""
    Dim i As Long = 1
    Try
        While i <= numValor
            valor = reader.ReadLine()
            i = i + 1
        End While
        daValorConfig = valor
        reader.Close()
    Catch ex As Exception
        reader.Close()
        MessageBox.Show(ex.Message, "Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Err.Clear()
    End Try
End Function

然后构建一个将新值写入指定行的过程,或者如果该行不是您指定的行,则保留旧值:

Public Sub guardaValorConfig(ByVal dados As String, ByVal numValor As Long, ByVal nomeFicheiroINI As String)

    Dim writer As StreamWriter = New StreamWriter(Application.StartupPath & "\" & nomeFicheiroINI & ".ini")
    Dim valor As String = ""
    Dim i As Long = 1
    Try
        While i <= numValor
            If i = numValor Then
                writer.Write(dados)
            Else
                writer.Write(daValorConfig(i, nomeFicheiroINI))
            End If
            i = i + 1
        End While
        writer.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message, "Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Err.Clear()
    End Try
End Sub