2013-05-14 6 views
0

Я пытаюсь записать целочисленные числа в двоичный файл, но он продолжает давать странные символы в двоичном файле. Например, я пытаюсь написать 2000, но в файле я получу что-то странное. Как это исправить? Не удалось найти решение в любом месте.Запись в бинарный файл .bin

Я использую следующий код:

//create the file 
     FileStream fs = new FileStream("iram.bin", FileMode.Create); 
     // Create the writer for data. 
     BinaryWriter w = new BinaryWriter(fs); 

w.Write((int) 2000); 

w.Close(); 
fs.Close(); 
+3

'' FileStream' и BinaryWriter' как реализовать 'интерфейс IDisposable'. Оберните их использование в блоке 'using' и откажитесь от явного' .Close() 's. –

ответ

4

Я думаю, что проблема в том, что вы не читаете данные надлежащим образом.

Вам нужно будет прочитать данные обратно, используя BinaryReader как так ...

using (FileStream fs2 = new FileStream("iram.bin", FileMode.Open)) 
    { 
     using(BinaryReader r = new BinaryReader(fs2)) 
     { 
      var integerValue = r.ReadInt32(); 
     } 
    } 

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

Если вы действительно хотите записать текстовые данные, можно сделать так, как это ... (Не забудьте установить кодировку, что вам нужно)

using (var tw = new StreamWriter("iram.txt", true, Encoding.ASCII)) 
    { 
     tw.WriteLine(2000); 
    } 

Edit: Как уже упоминалось Jesse вы обычно хотите обертывать одноразовые предметы при использовании блоков.

1

Причина вы получаете неожиданные символы в файле, потому что вы пишете в файл не предназначен для быть истолковано как последовательность символов, в первую очередь

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


для чтения человека текстового файла, который имеет последовательность символов 2000 на самом деле имеет кодировку символа 2, с последующим кодированием 0 3 раза.

в Unicode это U+0032U+0030U+0030U+0030

+0

Umm, no. OP отличает 2000 к int, поэтому он равен 0x7D0 или в двоичном файле, вероятно, 4 байта 0000 0111 1101 0000. Не Unicode –

+0

@ DanPichelman вы неправильно поняли эту часть. Я пытался проиллюстрировать, что может быть кодировка в файле, который будет отображать '' 2000 '', если он откроет его в текстовом редакторе. –

+0

@DanPichelman. Я сделал это, чтобы проиллюстрировать разницу между двоичным файлом и читаемым файлом. –

Смежные вопросы