Mon code jusqu'à présent
StreamReader reading = File.OpenText("test.txt");
string str;
while ((str = reading.ReadLine())!=null)
{
if (str.Contains("some text"))
{
StreamWriter write = new StreamWriter("test.txt");
}
}
Je sais comment trouver le texte, mais je ne sais pas comment remplacer le texte du fichier par le mien.
c#
.net
io
streamreader
file-handling
Win Coder
la source
la source
Réponses:
Lisez tout le contenu du fichier. Faites un remplacement avec
String.Replace
. Réécrivez le contenu dans le fichier.la source
Regex.Replace
System out of memory
exception.Vous allez avoir du mal à écrire dans le même fichier que vous lisez. Un moyen rapide consiste simplement à faire ceci:
Vous pouvez mieux exposer cela avec
la source
ReadAllText
accès aux fichiers ferme avantWriteAllText
. J'utilise cette technique même dans ma propre application.Vous devez écrire toutes les lignes que vous lisez dans le fichier de sortie, même si vous ne les modifiez pas.
Quelque chose comme:
Si vous souhaitez effectuer cette opération sur place, le moyen le plus simple consiste à utiliser un fichier de sortie temporaire et à la fin de remplacer le fichier d'entrée par la sortie.
(Essayer d'effectuer des opérations de mise à jour au milieu d'un fichier texte est assez difficile à obtenir car il est difficile de toujours avoir le remplacement de la même longueur étant donné que la plupart des encodages sont de largeur variable.)
EDIT: Plutôt que deux opérations sur les fichiers pour remplacer le fichier d'origine, mieux vaut l'utiliser
File.Replace("input.txt", "output.txt", null)
. (Voir MSDN .)la source
Il est probable que vous deviez extraire le fichier texte en mémoire, puis effectuer les remplacements. Vous devrez ensuite écraser le fichier en utilisant la méthode que vous connaissez clairement. Donc, vous devriez d'abord:
Vous pouvez alors parcourir et remplacer le texte dans le tableau.
cette méthode vous donne un certain contrôle sur les manipulations que vous pouvez effectuer. Ou, vous pouvez simplement faire le remplacement en une seule ligne
J'espère que ça aide.
la source
Voici comment je l'ai fait avec un gros fichier (50 Go):
J'ai essayé 2 façons différentes: la première, en lisant le fichier en mémoire et en utilisant Regex Replace ou String Replace. Ensuite, j'ai ajouté la chaîne entière à un fichier temporaire.
La première méthode fonctionne bien pour quelques remplacements Regex, mais Regex.Replace ou String.Replace peut provoquer une erreur de mémoire insuffisante si vous effectuez de nombreux remplacements dans un fichier volumineux.
La seconde consiste à lire le fichier temporaire ligne par ligne et à créer manuellement chaque ligne à l'aide de StringBuilder et à ajouter chaque ligne traitée au fichier de résultat. Cette méthode était assez rapide.
la source
la source
J'ai tendance à utiliser le code de transfert simple autant que possible, le code ci-dessous a bien fonctionné avec moi
la source