Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';无法从文件流写入_C#_Silverlight - Fatal编程技术网

C# Can';无法从文件流写入

C# Can';无法从文件流写入,c#,silverlight,C#,Silverlight,我试图从FileInfo中获取一个字节[] 这里,FileInfo(fi)是我放入silverlight应用程序的文件 因此,正如在msnd上发现的,我正在这样做: byte[] b = new byte[fi.Length]; UTF8Encoding temp = new UTF8Encoding(true); //Open the stream and read it back. usi

我试图从
FileInfo
中获取一个字节[]

这里,
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上,它似乎正在写入文件:

OpenWrite()
也会引发访问错误


还有其他方法可以将FileInfo文档读入字节吗?

要将文件读入字节[],最简单的方法是:

 byte[] myByteArray = File.ReadAllBytes(myFileInfo.FullName);
正如@Dmitry Bychenko allready所述,您试图写入以只读方式打开的文件流。 另一件事是,您希望写入与读取相同的文件流

要通过纠正您的尝试来解决问题,您可以执行以下操作:

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);
         }
     }
}

在您的情况下,我会投票支持第一个示例,因为它简单易读,并且完美地隐藏了流的内容。

所以您只打开流进行阅读,但尝试写入它。。。您还期望什么——“无法写入R/O流”对我来说似乎是合理的行为。。。不确定你试图做什么-所以你可能有其他的想法-考虑将你的实际目标添加到这个问题。看:<代码> FS= FI.OpenRead()/<代码>,代码> FS被打开以供阅读,而不是用于writing@AlexeiLevenkov我想要的是,将我放入的文件(转换为FileInfo)写入一个字节。我不明白你的意思“放入一个字节”…您已经将整个文件读入字节数组(如果恰好没有在一次调用中读取,则可能需要改进读取代码,方法是在每次读取调用时调整偏移量,但对于初始版本,这是可以的)…但是我不知道你后来想用数组做什么。@AlexeiLevenkov一旦我得到字节,我就想存储在一个对象中。然后,当我打开字节时,我有一个很好的文档。但是文档不是这样可读的。正如我在问题中说的,它是一个文件信息,不是文件,所以我没有ReadAllBytes()@Zaphod如果你阅读我的第一个示例,你会看到我使用了FileInfo来获取文件的读取路径。是的,但由于我在silverlight,我没有。我正在尝试你的第二个解决方案。请看,它正在工作。关键是使用
memoryStream
。谢谢。