考慮:如何將大文件(大於1 GB)的編碼轉換爲Windows 1252而不發生內存不足異常?
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
}
}
上面這段代碼返回內存外的一個異常大文件和僅適用於小尺寸的文件。
你能不能用線做線? – BugFinder
您不需要使用ReadToEnd讀取整個內容。閱讀塊,轉換,寫入,重複。 – Evk
使用'foreach(File.ReadLines(filePath)中的字符串行)...處理行...' –