C# 使用Silverlight将文件保存在磁盘中
这是我的第一个silverlight应用程序,我需要在我的C:目录中保存一个文件。我的Silverlight应用程序将与我的网络摄像头建立连接,然后我将拍摄快照,然后将其保存在我的C:目录中 看看我做了什么C# 使用Silverlight将文件保存在磁盘中,c#,wpf,silverlight,C#,Wpf,Silverlight,这是我的第一个silverlight应用程序,我需要在我的C:目录中保存一个文件。我的Silverlight应用程序将与我的网络摄像头建立连接,然后我将拍摄快照,然后将其保存在我的C:目录中 看看我做了什么 在我的WriteBytesToFile中,我得到了不允许的错误文件操作。对路径的访问被拒绝。。如何将快照保存在名为imagem.png的C:目录中?Silverlight应用程序运行在中,并且没有任何对文件系统的直接访问权限。要使Silverlight应用程序能够访问本地文件系统,必须将其安
在我的WriteBytesToFile中,我得到了不允许的错误文件操作。对路径的访问被拒绝。。如何将快照保存在名为imagem.png的C:目录中?Silverlight应用程序运行在中,并且没有任何对文件系统的直接访问权限。要使Silverlight应用程序能够访问本地文件系统,必须将其安装为。受信任的Silverlight 5应用程序可以访问整个硬盘驱动器,但Silverlight 4应用程序只能访问MyDocuments、MyMusic、MyPictures和MyVideos文件夹。最好使用File.writeAllBytes字符串路径、byte[]数据。错误非常清楚。您需要升级权限才能写入C:目录,因此请选择一个不同的目录,该目录不需要这些权限或评估程序的权限。我尝试了D:但也没有访问权限。在我的web应用程序中,我在磁盘上做了很多写操作,所以我不知道为什么这在特定情况下不起作用。我已经做了一个测试,将文件保存在MyDocuments中,但这给了我相同的错误,但您的回答给了我一个更好的关于silverlight的unsertand。谢谢
protected void photoButton_Click(object sender, RoutedEventArgs e)
{
this.src.CaptureImageCompleted += (s, a) =>
{
this.lastSnapshot = a.Result;
this.snapshot.Visibility = Visibility.Visible;
this.snapshot.Source = this.lastSnapshot;
this.src.Stop();
if (this.lastSnapshot != null)
{
var pngStream = this.GetPngStream(lastSnapshot);
byte[] binaryData = new Byte[pngStream.Length];
long bytesRead = pngStream.Read(binaryData, 0, (int)pngStream.Length);
WriteBytesToFile("imagem.png", binaryData);
}
};
src.CaptureImageAsync();
}
static public void WriteBytesToFile(string fileName, byte[] content)
{
FileStream fs = new FileStream(fileName, FileMode.Create);
BinaryWriter w = new BinaryWriter(fs);
try
{
w.Write(content);
}
finally
{
fs.Close();
w.Close();
}
}
protected Stream GetPngStream(WriteableBitmap bmp)
{
// Use Joe Stegman's PNG Encoder
// http://bit.ly/77mDsv
EditableImage imageData = new EditableImage(bmp.PixelWidth, bmp.PixelHeight);
for (int y = 0; y < bmp.PixelHeight; ++y)
{
for (int x = 0; x < bmp.PixelWidth; ++x)
{
int pixel = bmp.Pixels[bmp.PixelWidth * y + x];
imageData.SetPixel(x, y,
(byte)((pixel >> 16) & 0xFF),
(byte)((pixel >> 8) & 0xFF),
(byte)(pixel & 0xFF),
(byte)((pixel >> 24) & 0xFF)
);
}
}
return imageData.GetStream();
}