2013-06-17 13 views
7

मौजूदा कोड फ़ाइल को टेक्स्ट सहेजने के लिए File.AppendAllText(filename, text) अधिभार को कॉल कर रहा है।File.AppendAllText डिफ़ॉल्ट एन्कोडिंग

मुझे पीछे की संगतता को तोड़ने के बिना एन्कोडिंग निर्दिष्ट करने में सक्षम होना चाहिए। अगर मैं File.AppendAllText(filename, text, encoding) ओवरलोड का उपयोग करना चाहता था तो मुझे यह सुनिश्चित करने के लिए एन्कोडिंग की आवश्यकता होगी कि फ़ाइलों को ठीक उसी तरह बनाया गया था?

उत्तर

9

AppendAllText() के दो तर्क अधिभार आंतरिक विधि File.InternalAppendAllText() एक UTF-8 एन्कोडिंग का उपयोग कर बीओएम बिना बुला समाप्त होता है:

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

तो ऐसा लगता है कि आप यूटीएफ 8 हेनकोडिंग के उदाहरण को यूटीएफ 8 हेडर बाइट्स के बिना पास करना चाहते हैं।

संबंधित मुद्दे