2011-12-29 76 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

相關問題