VB.NET多重替换文本文件

时间:2016-07-31 12:36:37

标签: vb.net

我有2个文件,一个index.html更像是模板,输出索引文件是一个新文件。第一个索引文件包含## 1,## 2 .... ## 24,我希望用文本文件中提供的一些链接替换它们。

让我解释一下我的代码。首先,我创建我的输出文件。 我声明包含链接的行数组将替换## 1 .... ## 24。 我循环24次以使用allLines提供的链接替换所有##。在最终文件中,它只替换了一些##而不是全部

我的表单如下https://s32.postimg.org/6h3ug8s7p/Untitled.png

问题是它没有替换所有链接,它只替换了其中的一些,这真的很奇怪。

    IO.File.Create(TextBox3.Text).Dispose()

    Dim allLines As String() = System.IO.File.ReadAllLines(TextBox1.Text)
    For c As Integer = 1 To 24 Step 1

        My.Computer.FileSystem.WriteAllText(TextBox3.Text, My.Computer.FileSystem.ReadAllText(TextBox2.Text).Replace("##" & c, allLines(c - 1)), True)

    Next

1 个答案:

答案 0 :(得分:0)

问题是您使用相同的源文件(TextBox2.Text)不断读取/写入文件。 File.WriteAllText会覆盖已存在的任何文件,并且在进行替换之前您不会重新读取该文件的内容。

您应该做的是阅读文本一次,完成所有替换,然后将文本写出一次。这些方面的东西:

Dim sb as new StringBuilder(File.ReadAllText(TextBox2.Text))
Dim allLines = File.ReadAllLines(TextBox1.Text)
For c as Integer = 1 to 24
    sb.Replace("##"&c, allLines(c-1))
Next x

File.WriteAllText(TextBox3.Text, sb.ToString())

请注意,您确实需要一些错误处理(以确保这些文本框中还有数据 - 也可以使用更好的名称)

您也不需要拨打File.Create()File.WriteAllTextcreate the file if it does not exist