2013-06-17 7 views
7

Vorhandener Code ruft die File.AppendAllText(filename, text)-Überladung auf, um Text in einer Datei zu speichern.File.AppendAllText Standardcodierung

Ich muss in der Lage sein, Codierung ohne Rückwärtskompatibilität zu spezifizieren. Wenn ich die File.AppendAllText(filename, text, encoding) Überladung verwenden würde, welche Kodierung müsste ich angeben, um sicherzustellen, dass Dateien auf genau die gleiche Weise erstellt wurden?

Antwort

9

Die beiden Argumente Überlastung der AppendAllText() den internen Aufruf der Methode endet File.InternalAppendAllText() eine UTF-8-Kodierung ohne BOM mit: Deshalb

[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); 
} 

, können Sie schreiben:

using System.IO; 
using System.Text; 

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

Ein kurzer Blick auf Die Quellen für File.AppenAllText zeigen die folgende Implementierung:

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; 
    } 
} 

Es sieht also so aus, als ob Sie eine Instanz von UTF8Encoding ohne die Header-Bytes UTF8 übergeben möchten.

Verwandte Themen