Перезаписать определенную строку в текстовом файле, используя VB.NET - PullRequest
5 голосов
/ 12 января 2010

Мне нужно сделать следующее:

Изменить строку в текстовом файле

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

с этой строкой

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

Эти пути, безусловно, будут разной длины, поэтому мне нужно либо заменить то, что находится в кавычках, либо полностью удалить строку и ввести новую, но в том же месте, не добавляя в конец документа. *

Ответы [ 6 ]

8 голосов
/ 27 апреля 2010

Это сделает свое дело

    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)
3 голосов
/ 13 января 2010

Если вы действительно точно знаете, как выглядит строка, которую вы хотите заменить, и файл, который вы читаете, не очень большой, вы можете попробовать использовать Replace (), чтобы добавить новую строку вместо старой:

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)
1 голос
/ 12 января 2010

Вот в чем дело: из-за того, как файлы хранятся на диске, вы не можете записывать в одну строку, не обновляя каждую следующую за ней строку. Есть несколько способов сделать это, и наиболее подходящий для вашей ситуации будет зависеть от таких вещей, как размер файла, вы делаете это со многими файлами, где в файле вы ожидаете найти это и т. д.

Но большую часть времени мне нравится создавать копию старого файла ... Так что, когда я просматриваю файл, ища строки, которые мне нужно изменить, я также пишу что Я прочитал в новом месте. Когда я нахожу строку, я выписываю новую информацию. Затем я продолжаю поиск по файлу, пока не достигну конца, после чего закрываю оба потока, удаляю оригинал и переименовываю новый.

1 голос
/ 12 января 2010

Считать текстовый файл в строку, выполнить итерацию по каждой строке и проверить, имеет ли он формат:

[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.

0 голосов
/ 27 августа 2014

Сначала создайте функцию, чтобы задать значение строки 'n':

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
0 голосов
/ 13 января 2010

Одним из быстрых способов является использование readAllLines и WriteAllLines:

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

Если вы не знаете, какую строку изменить, вы можете найти ее в массиве ss.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...