Открытый файл в Silverlight не работает, пока работает OpenRead - PullRequest
2 голосов
/ 29 декабря 2011

Приложение для браузера.

У меня есть стандартный код для открытия диалога открытия файла, а затем чтения файла с помощью 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 share?

1 Ответ

2 голосов
/ 29 декабря 2011

Ответ: ты не можешь. OpenFileDialog даст вам доступ только для чтения к рассматриваемому файлу. Точно так же SaveFileDialog дает вам только право на запись. Вы не можете контролировать уровень общего доступа, поэтому не можете указать общий ресурс ReadWrite.

Вам необходимо сначала попросить пользователя закрыть файл Excel, прежде чем продолжить как часть обработки этой ошибки.

...