Bonjour,
je cherche à faire une petite fonction qui permet l'édition de fichier et grossièrement, patcher.
Par exemple, le cas d'un fichier d'un fichier texte, contenant des informations dans le genre:
Bonjour <NOM>
le <MESSAGE1> vous salut
avec <MESSAGE2> d'enthousiasme
à bientôt...
L'appel de la fonction avec ces arguments:
ReplaceInFile("fichier.txt", new string[] { "NOM", "MESSAGE1", "MESSAGE2" }, new string[] { "dtcSearch", "lion de la Savane", "beaucoup" });
Devrait produire le résultat:
Bonjour dtcSearch
le lion de la Savane vous salut
avec beaucoup d'enthousiasme
à bientôt...
Voici la fonction (qui ne fonctionne pas):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public static void ReplaceInFile(string path, string[] keys, string[] values)
{
MessageBox.Show("fonctionne pas...");
if (File.Exists(path))
{
int ipos;
string buffer;
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs, true);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
sw.AutoFlush = true;
while ((buffer = sr.ReadLine()) != null)
{
for (int i = 0; i < keys.Length; i++)
{
ipos = 0;
do
{
ipos = buffer.IndexOf("<" + keys[i] + ">", ipos);
if (ipos != -1)
{
sw.BaseStream.Seek(ipos, SeekOrigin.Current);
sw.Write(values[i]);
ipos++;
}
} while (ipos != -1);
}
}
sw.Close();
sr.Close();
fs.Close();
}
} |
Les problèmes sont simples:
- ça fonctionne pas, ça ne modifie pas le fichier.
- si ça fonctionnait, y'auriez t'il pas des problèmes d'écrasement (et pas de remplacement propre) dû au couple Seek/Write
- le couple Seek/Write est t'il bon dans ce cas? (je pense pas)
- l'encodage du fichier n'est pas géré
- le couple Seek/Write est t'il envisable dans ce cas?
- voir plus avec un MemoryStream pour faire une édition en Hexadécimal directement?
Voilà, si vous avez des idées, tout est le bienvenu, je vous remerci d'avance.
Partager