1

我需要更改文件的编码。我使用的方法将所有文件加载到内存中:

string DestinationString = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(File.ReadAllText(FileName)));
File.WriteAllText(FileName, DestinationString, new System.Text.ASCIIEncoding());

这适用于较小的文件(如果我想将文件的编码更改为ASCII),但对于大于 2 GB 的文件就不行了。如何在不将所有文件内容加载到内存的情况下更改编码?

4

1 回答 1

3

您不能通过写入同一个文件来做到这一点 - 但您可以轻松地将其写入不同的文件,只需以一种编码一次读取一大块字符并以目标编码写入每个块。

public void RewriteFile(string source, Encoding sourceEncoding,
                        string destination, Encoding destinationEncoding)
{
    using (var reader = File.OpenText(source, sourceEncoding))
    {
        using (var writer = File.CreateText(destination, destinationEncoding))
        {
            char[] buffer = new char[16384];
            int charsRead;
            while ((charsRead = reader.Read(buffer, 0, buffer.Length)) > 0)
            {
                writer.Write(buffer, 0, charsRead);
            }
        }
    }
}

当然,您总是可以通过重命名获得原始文件名。

于 2016-03-11T07:04:25.113 回答