Как обнаружить файл, открытый с помощью silverlight saveDialog для C #? - PullRequest
3 голосов
/ 25 октября 2011

Если файл открыт другим приложением, а затем я пытаюсь сохранить его через Silverlight SaveDialog, я могу поймать ошибку за исключением, но после этого я получаю эту ошибку.

Строка: 57 Ошибка: необработанная ошибка в приложении Silverlight Код приложения: 4004
Категория: ManagedRuntimeError
Сообщение: System.InvalidOperationException: Эта операция может выполняться только в потоке пользовательского интерфейса.в System.Windows.Hosting.NativeHost.VerifyThread () в System.Windows.SaveFileStream.Dispose (логическое удаление) в System.IO.FileStream.Finalize ()

Я бы предпочел обнаружить, чтофайл открыт, но не может этого сделать.Я пробовал fs.CanWrite, но он возвращает true, даже если файл открыт другим приложением.

РЕДАКТИРОВАТЬ: Здесь - это сообщение на форуме silverlight, которое, кажется, объясняетчто происходит, хотя они думают, что это просто файлы Office.У меня проблема с файлом PDF.

Вот мой код:

    public void PDFSaveFile(bool success)
    {
        // silverlight requires saveFileDialog to be user-initiated, 
        // so this is called from the OK button of a pop-up window
        // ignore success, we only gave an OK option
        byte[] fileBytes = doc.ToPDF().ToArray();
        PDFClose();

        try
        {
            SaveFileDialog saveFileDlg = new SaveFileDialog();
            saveFileDlg.Filter = "PDF files (*.pdf)|*.pdf";
            bool? dialogResult = saveFileDlg.ShowDialog();
            if (dialogResult == true)
            {
                using (var fs = saveFileDlg.OpenFile())
                {
                    fs.Write(fileBytes, 0, fileBytes.Length);
                    fs.Close();
                }
            }
        }
        catch (Exception ex)
        {
            Log.HandleInternalError(string.Format("Unable to save file: {0}",ex.Message));
        }
    }

1 Ответ

2 голосов
/ 29 октября 2012

Вы можете использовать FileInfo.Open если вернуть IOException = Файл уже открыт

FileInfo.Open

...