Bonjour,
Tout dépend de la taille du fichier à traiter. Si le fichier est petit, on peut tout lire en une seul fois, trouver et écrire tout le reste en une seul fois à nouveau.
Si le fichier à traiter est de taille important, vous pouvez utiliser ce genre de méthode
Imports System.IO
Private Sub DeleteAllBefore(ByVal filePath As String, ByVal searchString As String)
'Création d'un chemin vers un fichier temporaire (dans le même dossier que le fichier source)
Dim tempPath As String = Path.Combine(Path.GetDirectoryName(filePath), Path.GetFileName(Path.GetTempFileName))
Dim ligne As String = String.Empty
Dim finded As Boolean = False
'Création d'un objet qui va lire dans le fichier source (reader) et d'un objet qui va écrire dans
'le fichier temporaire (writer)
Using reader As New StreamReader(filePath), writer As New StreamWriter(tempPath)
'Lit dans le fichier source tant que la ligne recherchée n'est pas trouvée
'et que la fin de fichier n'est pas atteinte
While ((Not finded) AndAlso (Not reader.EndOfStream))
ligne = reader.ReadLine()
finded (ligne.Trim.ToLower() searchString.Trim.ToLower())
End While
'Transfert toutes les lignes restantes dans le fichier temporaire
While (Not reader.EndOfStream)
writer.WriteLine(ligne)
ligne = reader.ReadLine()
End While
End Using
'Si la ligne recherchée est trouvée, on remplace la source par le fichier temporaire
If finded Then
File.Copy(tempPath, filePath, True)
Else
Throw New ApplicationException(String.Format("La chaine {0} n'a pas pu être trouvée dans le fichier {1}", searchString, filePath))
End If
'Suppression du fichier temporaire
File.Delete(tempPath)
End Sub
Utilisation
DeleteAllBefore("C:\MonFichier.txt", "")