c#检测文件是否已完成写入

本文关键字:已完成 是否 检测 文件 | 更新日期: 2023-09-27 18:22:02

我正在编写一个PowerPoint插件,该插件是一个已转换为WMV的文件。

我有以下代码可以很好地工作:

oPres.CreateVideo(exportName);
oPres.SaveAs(String.Format(exportPath, exportName),PowerPoint.PpSaveAsFileType.ppSaveAsWMV,MsoTriState.msoCTrue);

但这启动了PP中的一个过程,该过程进行文件转换,并在文件完成写入之前立即转到下一行代码。

有没有一种方法可以检测这个文件何时完成编写,这样我就可以在知道文件已经完成的情况下运行下一行代码?

c#检测文件是否已完成写入

当一个文件正在使用时,它是不可用的,因此您可以检查可用性并等待该文件可用。一个例子:

    void AwaitFile()
    {
        //Your File
        var file  = new FileInfo("yourFile");
        //While File is not accesable because of writing process
        while (IsFileLocked(file)) { }
        //File is available here
    }
    /// <summary>
    /// Code by ChrisW -> http://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in-use
    /// </summary>
    protected virtual bool IsFileLocked(FileInfo file)
    {
        FileStream stream = null;
        try
        {
            stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
        }
        catch (IOException)
        {
            return true;
        }
        finally
        {
            if (stream != null)
                stream.Close();
        }
        //file is not locked
        return false;
    }