我正在处理巨大的字符串(文件为100MB - 文本)。文件文本存储在StringBuilder中。
由于某些原因,我需要更改此文本的编码,之前无法预料到这一点,从CURRENT-Encoding到NEW-Encoding。所以,我需要使用
Encoding.Convert(...)
功能。由于这个文件是HUGH,我想把它分成几部分。例如,每次1024个字符。将StringBuilder分解为子字符串对我来说似乎是一个问题,因为我不想使用
.ToString()
功能(表现原因)。
您如何建议我这样做,而不是将整个文本带到一个字符串?
答案 0 :(得分:3)
只需使用StreamReader就可以流式传输文件(而不是一次性完全读取),并使用指定的编码将其读回的字符写回新文件:
string sourcePath = "...";
string destinationPath = "...";
Encoding sourceEncoding = Encoding.UTF16;
Encoding destinationEncoding = Encoding.UTF8;
char[] readBuffer = new char[1024];
int bytesRead;
using (var writer = new StreamWriter(destinationPath, false, destinationEncoding))
{
using (var reader = new StreamReader(sourcePath, sourceEncoding))
{
while ((bytesRead = reader.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
writer.Write(buffer, 0, bytesRead);
}
}
}