2011-12-29 45 views
2

浏览器内应用程序。OpenRead工作时Silverlight中的打开文件不起作用

我有一个打开打开文件对话框的标准代码,然后使用dlg.File.OpenRead()读取文件。现在问题来了,如果该文件是用Excel打开的。开幕失败,因为在内部它下面:

public FileStream OpenRead() 
{ 
    new FileIOPermission(FileIOPermissionAccess.Read, this.FullPath).Assert(); 
    return new FileStream(this.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, false); 
} 

要访问在Excel中打开,你必须使用FileShare.ReadWrite文件。好吧,有Open方法,所以我写:

dlg.File.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 

,它给错误:“文件操作不允许访问路径‘XYZ’被拒绝”。我查了一下Open内部做:

public FileStream Open(FileMode mode, FileAccess access, FileShare share) 
{ 
    return new FileStream(this.FullPath, mode, access, share); 
} 

几乎相同,除了请求FileIOPermission,这又是内部的,你不能在代码中使用它。

所以问题是,如何使Open工作?或者如何用ReadWrite共享打开文件?

+0

这是一个OOB应用程序或浏览器内? – 2011-12-29 16:07:05

+0

@Christopher Estep浏览器中 – Andrey 2011-12-29 16:08:36

回答

2

答案是:你不能。 OpenFileDialog只会让你阅读有问题的文件。同样,SaveFileDialog只能为您提供写入权限。您无法控制共享级别,因此您无法指定共享ReadWrite。

作为处理此错误的一部分,您需要先让用户先关闭Excel文件。

+0

真的很奇怪,无法控制共享的级别。另一个解决方法是使用HTML表单将文件提交给服务器并在那里处理并将结果发送回SL。 – Andrey 2011-12-29 21:23:02

相关问题