その非常に奇妙な、私はメディアファイルを読み取り、サードパーティの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");
このコードにアクセスした後、そのファイルを手動で削除しようとすると、同じエラーメッセージが表示され、接続を強制的に閉じてファイルを解放する方法がわかりません。
どんな助けでも大歓迎です。