2011-12-29 3 views
2

ブラウザ内のアプリケーションです。OpenReadが動作している間にSilverlightのファイルが開かない

私はOpen File Dialogを開き、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); 
} 

あなたはFileShare.ReadWriteを使用する必要がExcelで開かれたファイルにアクセスするには:内部的には、以下のんので開口部が、失敗しました。 [OK]を、そこ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アプリですか、ブラウザ内ですか? –

+0

@Christopher Estep in browser – Andrey

答えて

2

答えは次のとおりです。 OpenFileDialogは、問題のファイルへの読み取りアクセスのみを提供します。同様に、SaveFileDialogは書き込みアクセス権のみを与えます。共有のレベルを制御することはできないので、共有ReadWriteを指定することはできません。

このエラーの処理の一部として続行する前に、Excelファイルを閉じるようにユーザーに依頼する必要があります。

+0

共有のレベルを制御できないのは本当に奇妙です。もう1つの回避策は、HTMLフォームを使用してサーバーにファイルを送信し、そこで処理して結果をSLに返送することです。 – Andrey

関連する問題