2

这很奇怪,我有一个控制台应用程序,它可以读取媒体文件并使用第三方 dll(MediaInfo.dll)从媒体文件中提取一些数据

然后我将该文件从源上传到其他位置,最后我在一切完成后删除源中的该文件。

以下是我的删除代码。

                    GC.Collect();
                    FileInfo[] fiListImages = (new DirectoryInfo(mfsData.Images)).GetFiles(String.Format("*{0}*", sp.Story.Slug));
                    foreach (FileInfo fi in fiListImages)
                    {

                        bool ImageFolder = fi.Directory.Name.Contains("Images");
                        if (ImageFolder)
                        {

                            File.Delete(fi.FullName);

                        }
                    }

                    FileInfo[] fiListMedia = (new DirectoryInfo(mfsData.EncodedMedia)).GetFiles(String.Format("*{0}*", sp.Story.Slug), SearchOption.AllDirectories);
                    foreach (FileInfo fi in fiListMedia)
                    {



                        if (sp.Profile.Name == "Comedy" && fi.FullName.Contains(@"\Comedy"))
                        {
                            File.Delete(fi.FullName);
                        }
                        else if (sp.Profile.Name == "Actuib" && ((fi.FullName.Contains(@"\Action") || (fi.FullName.Contains(@"\Syndicated")))))
                        {
                            File.Delete(fi.FullName);
                        }


                    }

我只想在开始删除之前调用垃圾收集器(我认为这将帮助我删除所有锁,但我错了)。

该代码有时工作得非常好,有时它会抛出此异常“进程无法访问该文件,因为它正在被另一个进程使用”。

当我将媒体文件加载到第三方库时,我可能会怀疑另一个地方,如下所示

                videoInterrogator.LoadFile(filename);
                logger.Info("video interrogar extract the video files");
                message.AppendFormat(messageFormat, "FileSize", videoInterrogator.GetFileSize(), Environment.NewLine);
                message.AppendFormat(messageFormat, "MaxBitRate", videoInterrogator.maxBitRate(), Environment.NewLine);
                logger.Info("Video Extract done");

进入这段代码后,当我尝试手动删除该文件时,我收到相同的错误消息,并且不确定如何强制关闭连接以释放文件。

非常感谢任何帮助。

4

1 回答 1

2

有关的更多信息videoInterrogator肯定会有用。尝试检查其文档。如果它实现了,请在完成后IDisposable尝试调用Dispose()该对象。如果是 COM 对象调用Marshal.ReleaseComObject()

于 2012-07-05T04:48:46.797 回答