2013-06-17 14 views
7

Il codice esistente chiama il sovraccarico File.AppendAllText(filename, text) per salvare il testo in un file.Codifica predefinita File.AppendAllText

Devo essere in grado di specificare la codifica senza rompere la compatibilità all'indietro. Se dovessi utilizzare il sovraccarico File.AppendAllText(filename, text, encoding) che codifica dovrei specificare per garantire che i file siano stati creati esattamente nello stesso modo?

risposta

9

i due argomenti di sovraccarico di AppendAllText() finisce per chiamare il metodo interno File.InternalAppendAllText() utilizzando una codifica UTF-8 senza BOM:

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

Pertanto, è possibile scrivere:

using System.IO; 
using System.Text; 

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

Un rapido sguardo a le fonti per File.AppenAllText rivela la seguente implementazione:

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

Quindi sembra che tu voglia passare un'istanza di UTF8Encoding senza i byte di intestazione UTF8.

Problemi correlati