2013-10-15 3 views
4

Ну, я пытаюсь записать некоторые значения и строки в текстовый файл.
, но этот текстовый файл должен содержать 2 байтаИспользование Stream writer для записи определенных байтов в текстовый файл

Эти 2 байта, которые я хочу, чтобы вставить в мой текстовый файл после окончания записи других значений к нему:

hex

Я попробовал этот метод, но Я понятия не имею, как писать байты через него

using (StreamWriter sw = new StreamWriter(outputFilePath, false, Encoding.UTF8)) 

Я не имею ни малейшего представления о том, как записать их в текстовый файл после ввода строки, которые я хочу на ней.

+1

Вы пробовали 'File.Open'? –

+0

Неясно, что означают эти байты или что остальное текстовое. Можете ли вы дать нам больше контекста? –

+0

Вы пытаетесь написать текст UTF-16? Эти два байта могут быть отмечены байтом (BOM) для UTF-16 (см. Http://en.wikipedia.org/wiki/Byte_order_mark#UTF-16). В этом случае попробуйте перейти на Encoding.Unicode в свой звонок, и я считаю, что структура будет писать спецификацию для вас. –

ответ

6

Если я правильно помню из вашего вопроса. Вы хотите записать строки в файл, а затем записать в него байты?

Этот пример будет делать это для вас:

using (FileStream fsStream = new FileStream("Bytes.data", FileMode.Create)) 
using (BinaryWriter writer = new BinaryWriter(fsStream, Encoding.UTF8)) 
{ 
    // Writing the strings. 
    writer.Write("The"); 
    writer.Write(" strings"); 
    writer.Write(" I"); 
    writer.Write(" want"); 
    writer.Write("."); 

    // Writing your bytes afterwards. 
    writer.Write(new byte[] 
       { 
        0xff, 
        0xfe 
       }); 
} 

При открытии файла «Bytes.data» с шестнадцатеричным редактором вы должны увидеть эти байты: enter image description here

0

Там является StreamWriter.Write(char), который будет записывать 16-битное значение. Вы должны установить свою переменную с шестнадцатеричным значением, например char val = '\xFFFE', и передать его Write. Вы также можете использовать FileStream, где все методы Write работают с байтами, и у него есть метод WriteByte(byte). MSDN documentation для него дает пример вывода текста UTF8.

2

Если я правильно понял, вы пытаетесь записать некоторые строки в текстовый файл, но вы хотите добавить к этому файлу 2 байта.

Почему вы не попробуете использовать: File.WriteAllBytes?

Преобразование строки в массив байтов, используя

byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(str); // If your using UTF8 

Создать новый массив из исходного ByteArray, с дополнительными 2 байта.

и записать их в файл с помощью:

File.WriteAllBytes("MyFile.dat", newByteArray) 
+0

Дать пояснение? – Yaniv

9

Я просто понял это. Это хорошо работает для меня. Идея заключается в том, что вы открываете файл с FileStream, который может писать массивы байтов, и помещать StreamWriter поверх него для записи строк. И тогда вы можете использовать как для смешивания строк с байтами:

// StreamWriter writer = new StreamWriter(new FileStream("file.txt", FileMode.OpenOrCreate)); 

byte[] bytes = new byte[] { 0xff, 0xfe }; 
writer.BaseStream.Write(bytes, 0, bytes.Length); 
0

Вот еще один способ найти решение ...

StringBuilder sb = new StringBuilder(); 

sb.Append("Hello!! ").Append(","); 
sb.Append("My").Append(","); 
sb.Append("name").Append(","); 
sb.Append("is").Append(","); 
sb.Append("Rajesh"); 
sb.AppendLine(); 

//use UTF8Encoding(true) if you want to use Byte Order Mark (BOM) 
UTF8Encoding utf8withNoBOM = new UTF8Encoding(false); 

byte[] bytearray; 

bytearray = utf8withNoBOM.GetBytes(sb.ToString()); 

using (FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Request.MapPath("~/" + "MyFileName.csv"), FileMode.Append, FileAccess.Write)) 
{ 
    StreamWriter sw = new StreamWriter(fileStream, utf8withNoBOM); 

    //StreamWriter for writing bytestream array to file document 
    sw.BaseStream.Write(bytearray, 0, bytearray.Length); 
    sw.Flush(); 
    sw.Close(); 

    fileStream.Close(); 
} 
Смежные вопросы