public static void ConvertFileToUnicode1252(string filePath, Encoding srcEncoding)
{
try
{
StreamReader fileStream = new StreamReader(filePath);
Encoding targetEncoding = Encoding.GetEncoding(1252);
string fileContent = fileStream.ReadToEnd();
fileStream.Close();
// Saving file as ANSI 1252
Byte[] srcBytes = srcEncoding.GetBytes(fileContent);
Byte[] ansiBytes = Encoding.Convert(srcEncoding, targetEncoding, srcBytes);
string ansiContent = targetEncoding.GetString(ansiBytes);
// Now writes contents to file again
StreamWriter ansiWriter = new StreamWriter(filePath, false);
ansiWriter.Write(ansiContent);
ansiWriter.Close();
//TODO -- log success details
}
catch (Exception e)
{
throw e;
// TODO -- log failure details
}
}
La pièce ci-dessus code renvoie une exception hors de la mémoire pour les gros fichiers et ne fonctionne que pour les fichiers de petite taille.
Pouvez-vous pas le faire ligne par ligne? – BugFinder
Vous n'avez pas besoin de lire tout le contenu avec ReadToEnd. Lire morceau, convertir, écrire, répéter. – Evk
Utilisez 'foreach (chaîne de caractères dans File.ReadLines (filePath)) ... ligne de processus ...' –