Meu código até agora
StreamReader reading = File.OpenText("test.txt");
string str;
while ((str = reading.ReadLine())!=null)
{
if (str.Contains("some text"))
{
StreamWriter write = new StreamWriter("test.txt");
}
}
Eu sei como encontrar o texto, mas não tenho idéia de como substituir o texto no arquivo pelo meu.
c#
.net
io
streamreader
file-handling
Win Coder
fonte
fonte
Respostas:
Leia todo o conteúdo do arquivo. Faça uma substituição com
String.Replace
. Grave o conteúdo novamente no arquivo.fonte
Regex.Replace
System out of memory
exceção.É difícil escrever no mesmo arquivo que você está lendo. Uma maneira rápida é simplesmente fazer isso:
Você pode definir melhor isso com
fonte
ReadAllText
fecha o acesso a arquivos antesWriteAllText
. Eu uso essa mesma técnica em meu próprio aplicativo.Você precisa escrever todas as linhas que lê no arquivo de saída, mesmo que não as altere.
Algo como:
Se você deseja executar esta operação no local, a maneira mais fácil é usar um arquivo de saída temporário e, no final, substituir o arquivo de entrada pela saída.
(É difícil acertar a execução de operações de atualização no meio do arquivo de texto, pois sempre é difícil ter a substituição do mesmo tamanho, pois a maioria das codificações tem largura variável.)
Edição: em vez de duas operações de arquivo para substituir o arquivo original, melhor usar
File.Replace("input.txt", "output.txt", null)
. (Consulte MSDN .)fonte
É provável que você precise puxar o arquivo de texto para a memória e fazer as substituições. Você precisará substituir o arquivo usando o método que você conhece claramente. Então você primeiro:
Você pode percorrer e substituir o texto na matriz.
esse método fornece controle sobre as manipulações que você pode fazer. Ou, você pode simplesmente fazer a substituição em uma linha
Eu espero que isso ajude.
fonte
Foi assim que fiz com um arquivo grande (50 GB):
Tentei duas maneiras diferentes: a primeira, lendo o arquivo na memória e usando Regex Replace ou String Replace. Em seguida, anexei a string inteira a um arquivo temporário.
O primeiro método funciona bem para algumas substituições de Regex, mas Regex.Replace ou String.Replace pode causar erro de falta de memória se você fizer muitas substituições em um arquivo grande.
A segunda é lendo o arquivo temporário linha por linha e construindo manualmente cada linha usando StringBuilder e anexando cada linha processada ao arquivo de resultado. Este método foi bem rápido.
fonte
fonte
eu tendem a usar o código simples de encaminhamento o máximo que posso, o código abaixo funcionou bem comigo
fonte