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

Tre*_*iel 3 .net c# powerpoint

我正在编写一个PowerPoint加载项,用于FTP已转换为WMV的文件.

我有以下代码可以正常工作:

oPres.CreateVideo(exportName);
oPres.SaveAs(String.Format(exportPath, exportName),PowerPoint.PpSaveAsFileType.ppSaveAsWMV,MsoTriState.msoCTrue);
Run Code Online (Sandbox Code Playgroud)

但这会启动PP中的进程,进行文件转换,并在文件写完之前立即转到下一行代码.

有没有办法检测此文件何时完成写入,以便我可以运行下一行代码知道该文件已完成?

dsf*_*sho 10

使用文件时,它不可用,因此您可以检查可用性并等待文件可用.一个例子:

    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;
    }
Run Code Online (Sandbox Code Playgroud)

  • 为此使用例外,成本相当高,不是吗? (2认同)
  • 很多时候,使用 FileSystemWatcher 实际上需要某种方法来确定文件是否仍在写入,因为 Created 事件在文件完全写入之前被抛出。我通常在处理之前对创建的文件进行排队以进行可用性检查。 (2认同)