2014-09-25 3 views
0

Я пытаюсь получить байт [] с FileInfo.Не могу написать из FileStream

Здесь FileInfo (fi) - это файл, который я заглядываю в свое приложение silverlight.

Итак, как найти на msnd, я делаю это:

byte[] b = new byte[fi.Length]; 
        UTF8Encoding temp = new UTF8Encoding(true); 
       //Open the stream and read it back. 
       using (FileStream fs = fi.OpenRead()) 
       { 

        while (fs.Read(b, 0, b.Length) > 0) 
        { 

         Console.WriteLine(temp.GetString(b)); 
        } 
       } 

Но, чтобы сделать это уровень защиты, я не могу использовать это.

Итак, я сделал это:

  byte[] b = new byte[fi.Length]; 
      UTF8Encoding temp = new UTF8Encoding(true); 
     //Open the stream and read it back. 
     using (FileStream fs = fi.OpenRead()) 
     { 

      while (fs.Read(b, 0, b.Length) > 0) 
      { 
       fs.Write(b, 0, b.Length); 
      } 
     } 

Но я получил сообщение, что я не могу писать от FileStream.

Почему я не могу написать свой файл Я вхожу в свое приложение в байт? Когда файл падает, он становится FileInfo.

Почему я использую OpenRead()? Потому что на msdn, кажется, он пишет файл: here

OpenWrite() также вызывает ошибку доступа.

Есть ли другой способ получить документ FileInfo, в байт?

+1

Итак, у вас есть открытый поток для чтения, но он пытается написать ему ... Что еще вы ожидаете - «не могу писать в поток R/O», кажется, разумное поведение для меня ... Не конечно, что вы пытаетесь сделать в целом - так что вы, вероятно, имеете что-то другое - подумайте о том, чтобы добавить свою реальную цель к вопросу. –

+0

Посмотрите: 'fs = fi.OpenRead()', 'fs' открывается для чтения, а не для записи –

+0

@AlexeiLevenkov, что я хочу, напишите File I drop (превратитесь в FileInfo) в байт. –

ответ

2

Для чтения файла в байтах [] Кстати easies бы:

byte[] myByteArray = File.ReadAllBytes(myFileInfo.FullName); 

Как @Dmitry Быченко Allready заявил, вы пытаетесь написать к FileStream открыто только для чтения. Другое дело, что вы хотите писать в тот же FileStream, который вы читаете.

Чтобы решить эту проблему, исправляя попытки вы сделали вы можете сделать:

byte[] b = new byte[fi.Length]; 
UTF8Encoding temp = new UTF8Encoding(true); 
//Open the stream and read it back. 
using (FileStream fs = fi.OpenRead()) 
{ 
    using (MemoryStream ms = new MemoryStream(b)) 
    { 
     while (fs.Read(b, 0, b.Length) > 0) 
     { 
      ms.Write(b, 0, b.Length); 
     } 
    } 
} 

В вашем случае я бы голосовать за первый пример, как его просто читать и скрывает поток материала отлично.

+1

Как я уже сказал в вопросе, это FileInfo, а не File, поэтому у меня нет ReadAllBytes(). –

+2

@ Zaphod, если вы прочтете мой первый пример, вы увидите, что я использовал FileInfo, чтобы получить путь к чтению файла. – wonko79

+0

Да, но, поскольку я нахожусь в серебряном свете, у меня его нет. Сейчас я пытаюсь сделать свое второе решение. Сеймс работает. Затем ключ использует «memoryStream». Спасибо. –

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