В C#, как добавить текстовую строку в файл без изменения исходной кодировки

StackOverflow https://stackoverflow.com/questions/2224381

  •  19-09-2019
  •  | 
  •  

Вопрос

Я хотел бы предварительно добавить (в начало) файл со строкой на С#.В настоящее время я просто заменяю содержимое файла своей строкой плюс исходное содержимое.Я НЕ ХОЧУ ЭТОГО ДЕЛАТЬ, потому что стример испортит закодированные символы.

Есть ли способ предварительно отложить текстовый файл, не меняя его исходную кодировку (каждого символа).

Должен быть способ.

Это было полезно?

Решение

Код внизу эта страница похоже, позволяет вам прочитать файл, сохранить кодировку, а затем записать его обратно, используя ту же кодировку.Вы должны иметь возможность изменить это, чтобы делать то, что вам нужно.

Другие советы

Кодирование текста — забавная вещь.Если вы пишете код, который будет интерпретироваться как закодированный персонажи, компилятору необходимо сообщить (или он может предположить), как следует расположить байты для представления определенных символов.Если ваша программа не зависит от кодировки файлов, с которыми вы будете работать, то как вы собираетесь указать компилятору, как он должен интерпретировать массив байтов в этом файле?

Вы можете рассматривать символы как поток байты вместо потока персонажи если вы не знаете, как дать указание компилятору интерпретировать эти байты (т.вы не знаете, какая кодировка будет использоваться во время выполнения).В этом случае вам нужно надеяться, что любые основные символы, которые вы решили добавить в начало файла, будут универсально распознаны в любой кодировке;это потому, что вы будете добавлять байты и не персонажи в начало файла.

Просто прочитайте файл, даже не декодируя байты.И вам нужно выбрать кодировку для своего заголовка — ASCII кажется самым безопасным выбором в вашей ситуации.

const String fileName = "test.file";
const String header = "MyHeader";

var headerBytes = Encoding.ASCII.GetBytes(header);
var fileContent = File.ReadAllBytes(fileName);

using (var stream = File.OpenWrite(fileName))
{
    stream.Write(headerBytes, 0, headerBytes.Length);
    stream.Write(fileContent, 0, fileContent.Length);
}

Обратите внимание, что код напрямую работает с потоком и не использует TextReader или TextWriter (это абстрактные базовые классы StreamReader и StreamWriter).Вы можете использовать BinaryReader и BinaryWriter чтобы упростить доступ к потоку, если вам приходится иметь дело с более сложными задачами, чем просто чтение и запись массива.

Я нашел это, что позволило мне получить правильную кодировку файла:http://www.personalmicrocosms.com/Pages/dotnettips.aspx?c=15&t=17

тогда я смогу использовать эту кодировку в стримере.

Безопасно ли использовать?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top