В C # как предварительно ожидать текстовую строку в файл без изменения оригинальной кодировки - PullRequest
1 голос
/ 08 февраля 2010

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

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

Ответы [ 4 ]

1 голос
/ 08 февраля 2010

Просто прочитайте файл без расшифровки байтов. И вы должны выбрать кодировку для своего заголовка - 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, чтобы упростить доступ к потоку, если вам приходится иметь дело с более сложными задачами, чем просто чтение и запись массива.

1 голос
/ 08 февраля 2010

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

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

0 голосов
/ 08 февраля 2010

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

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

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

0 голосов
/ 08 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...