如何使用 C# 的 silverlight saveDialog 检测文件是不是打开?

Posted

技术标签:

【中文标题】如何使用 C# 的 silverlight saveDialog 检测文件是不是打开?【英文标题】:How to detect file is open with silverlight saveDialog for C#?如何使用 C# 的 silverlight saveDialog 检测文件是否打开? 【发布时间】:2011-10-25 14:40:29 【问题描述】:

如果一个文件被另一个应用程序打开,然后我尝试通过 Silverlight SaveDialog 保存它,我可以捕捉到异常错误,但之后我得到了这个错误。

行:57 错误:Silverlight 应用程序中未处理的错误 代码:4004 类别:ManagedRuntimeError 消息:System.InvalidOperationException:此操作只能在 UI 线程上发生。 在 System.Windows.Hosting.NativeHost.VerifyThread() 在 System.Windows.SaveFileStream.Dispose(布尔处理) 在 System.IO.FileStream.Finalize()

我更愿意检测文件是否打开,但似乎无法做到这一点。我试过 fs.CanWrite,但它返回 true,即使文件被另一个应用程序打开。

编辑:Here 是 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】:

你可以使用 文件信息.打开 如果返回 IOException = 文件已打开

FileInfo.Open

【讨论】:

以上是关于如何使用 C# 的 silverlight saveDialog 检测文件是不是打开?的主要内容,如果未能解决你的问题,请参考以下文章

C# 在运行时检查 silverlight 对象大小

如何在 Windows phone silverlight 应用程序上从 C# 填充视频

使用 silverlight 4 和 c# 创建 CSV 下载

C# Silverlight Datagrid - 行颜色更改

如何使用 C# 裁剪图像?

从 asp.net c# 应用程序调用 Sav32Cli.exe “代码 2 - 如果发现阻止进一步执行的错误”