File.WriteAllText использует StreamWriter за кадром:
public static void WriteAllText(string path, string contents, Encoding encoding)
{
using (StreamWriter writer = new StreamWriter(path, false, encoding))
{
writer.Write(contents);
}
}
У вас уже есть строка, поэтому преобразование ее в байтовый массив было бы бессмысленным, поскольку в любом случае это выполняется внутри метода StreamWriter.Flush с использованием базового класса Encoder . Flush вызывается методом StreamWriter.Dispose , который вызывается предложением using. Это фрагмент от источника Flush через отражатель:
int count = this.encoder.GetBytes(this.charBuffer, 0, this.charPos, this.byteBuffer, 0, flushEncoder);
Вы можете видеть, что у него есть charBuffer. Это просто массив char [], в который он записывает, когда вы выполняете StreamWriter.Write (string) .
Короче говоря, у вас уже есть строка, просто позвольте более короткому методу File выполнять каскадные вызовы, поскольку он делает ваш источник немного более читабельным. Преобразование его в байтовый массив также не требуется, как я уже говорил, StreamWriter сделает это за вас.
Если у вас возникают проблемы с преобразованием, используйте Encoding.Unicode в качестве последнего параметра в перегрузке 3 параметров, так как File.WriteAllText (string, string) использует UTF8 без спецификации.