Перезапишите определенную строку в текстовом файле с помощью VB.NET

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

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

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

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

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

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

5
задан Peter Mortensen 29 June 2015 в 22:30
поделиться

5 ответов

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

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

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

1
ответ дан 18 December 2019 в 14:46
поделиться

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

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

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

0
ответ дан 18 December 2019 в 14:46
поделиться

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

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)
3
ответ дан 18 December 2019 в 14:46
поделиться

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

[Путь] = "...." (с регулярными выражениями или просто с 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);
}

, конечно, близко и утилизируйте stremereader и Streamwriter.

1
ответ дан 18 December 2019 в 14:46
поделиться

Это поможет

    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)
8
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: