这很奇怪,我有一个控制台应用程序,它可以读取媒体文件并使用第三方 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");
进入这段代码后,当我尝试手动删除该文件时,我收到相同的错误消息,并且不确定如何强制关闭连接以释放文件。
非常感谢任何帮助。