2013-06-17 8 views
7

既存のコードは、テキストをファイルに保存するためにFile.AppendAllText(filename, text)オーバーロードを呼び出しています。File.AppendAllText既定のエンコーディング

下位互換性を損なうことなくエンコードを指定できる必要があります。 File.AppendAllText(filename, text, encoding)オーバーロードを使用して、ファイルがまったく同じ方法で作成されたことを保証するために指定する必要がある場合は、

答えて

9

AppendAllText()の二つの引数の過負荷はBOMなしのUTF-8エンコーディングによる内部メソッドFile.InternalAppendAllText()を呼び出す終わる:

[SecuritySafeCritical] 
public static void AppendAllText(string path, string contents) 
{ 
    if (path == null) { 
     throw new ArgumentNullException("path"); 
    } 
    if (path.Length == 0) { 
     throw new ArgumentException(
      Environment.GetResourceString("Argument_EmptyPath")); 
    } 
    File.InternalAppendAllText(path, contents, StreamWriter.UTF8NoBOM); 
} 

したがって、あなたが書くことができた:

using System.IO; 
using System.Text; 

File.AppendAllText(filename, text, new UTF8Encoding(false, true)); 
4

で簡単に見File.AppenAllTextのソースは、次の実装を示しています。

public static void AppendAllText(string path, string contents) 
{ 
    // Removed some checks 
    File.InternalAppendAllText(path, contents, StreamWriter.UTF8NoBOM); 
} 

internal static Encoding UTF8NoBOM 
{ 
    get 
    { 
    if (StreamWriter._UTF8NoBOM == null) 
    { 
     StreamWriter._UTF8NoBOM = new UTF8Encoding(false, true); 
    } 
    return StreamWriter._UTF8NoBOM; 
    } 
} 

UTF8ヘッダーバイトなしでUTF8Encodingのインスタンスを渡すように見えます。

関連する問題