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

同じファイルに書き込むことによってこれを行うことはできませんが、1 つのエンコーディングで一度に文字のチャンクを読み取り、ターゲット エンコーディングで各チャンクを書き込むだけで、別のファイルに簡単に書き込むことができます。

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 に答える