매우 이상합니다. 미디어 파일을 읽고 타사 DLL (MediaInfo.dll)을 사용하여 미디어 파일에서 데이터를 추출하는 콘솔 응용 프로그램이 있습니다.프로세스가 파일을 액세스 할 수 없기 때문에 다른 프로세스에서 사용하고 있기 때문에 항상 사용할 수는 없습니다.
그리고 그 파일을 소스의 다른 위치에 업로드 한 다음, 마침내 모든 파일이 생성되면 souce에서 해당 파일을 삭제합니다.
아래는 제 코드입니다.
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);
}
}
난 그냥 시작 삭제 이전 가비지 컬렉터를 호출 할 (나는이 날 모든 잠금을 제거하지만, 잘못 생각하는 데 도움이 될 것입니다 생각).
코드가 너무 잘 작동하고 때로는 "프로세스가 다른 프로세스에서 사용 중이기 때문에 파일에 액세스 할 수 없습니다."라는이 예외가 throw됩니다.
내가 좋아하는 타사 라이브러리에 미디어 파일을로드 할 때 내가 다른 장소를 의심 할 수 아래
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");
후 내가 같은 오류가 수동으로 파일을 삭제하려고 할 때이 코드 조각에 도착 메시지를 표시하고 강제로 연결을 닫아 파일을 해제하는 방법을 모르겠습니다.
도움을 주시면 감사하겠습니다.
코드의 올바른 형식 및 들여 쓰기가 매우 유용합니다. – TheVillageIdiot
전 세계에서 'videoInterrogator'가 무엇인지 알 수 없습니다. 하지만 타사 응용 프로그램/라이브러리이고 네트워크에 파일을 업로드하는 경우 작업을 완료 할 때 제기해야하는 일정이 있어야합니다. – TheVillageIdiot
@ TheVillageIdiot, VideoInterrogator는 제 3 자 dll (media info) – Usher