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
。谢谢。