Salut.
Voici un exemple en C#. Tu n'as plus qu'à le traduire en VB.NET, puisque ce sont les mêmes objets/méthodes.
C'est pas forcément la méthode la plus courte ni la plus simple, mais la plus claire parmi celles qui permettent de manipuler de gros fichiers.
Les ReadToEnd(), non merci, quand tu modifies un fichier qui fait 800 Mo moi ça me gêne un peu
Ici on traîte donc ligne par ligne, et on en profite pour faire un backup.
Code :
using System; using System.IO; using System.Windows.Forms; namespace SandBox { public partial class Form1 : Form { const string FILENAME = @"c:\in\exemple.ini"; public Form1() { InitializeComponent(); LoadFile(); } private void button1_Click(object sender, EventArgs e) { int selected = listBox1.SelectedIndex; int current = 0; string tmpFileName = Path.GetTempFileName(); TextReader tr = new StreamReader (FILENAME ); TextWriter tw = new StreamWriter (tmpFileName ); FileInfo f = new FileInfo (FILENAME ); while (tr.Peek() > 0) { if (current++ == selected) { tw.WriteLine(textBox1.Text); } tw.WriteLine(tr.ReadLine()); } tr.Close(); tr.Dispose(); tw.Flush(); tw.Close(); tw.Dispose(); File.Replace(tmpFileName, FILENAME, string.Format("{0}.old", FILENAME)); LoadFile(); } private void LoadFile() { int selected = listBox1.SelectedIndex; TextReader tr = null; try { tr = new StreamReader (FILENAME ); } catch (FileNotFoundException e) { // Fichier inexistant, on ne fait rien } finally { if (tr != null) { listBox1.Items.Clear(); while (tr.Peek() > 0) { listBox1.Items.Add(tr.ReadLine()); } tr.Close(); listBox1.SelectedIndex = selected; } } } } }
|
Et on split pas pour lire un fichier texte, on n'est pas en train de faire du PHP là...