public bool DownloadMp3File (DownloadedMp3 mp3) {
WebClient client = new WebClient();
string filePath = "";
bool wasDownload = false;
try {
string song = mp3.SongName;
filePath = @"mp3\" + song + ".mp3";
if (File.Exists (filePath)) {
File.Delete (filePath);
}
DateTime tryCountNow = DateTime.Now;
client = new WebClient();
client.DownloadFileAsync (new Uri (mp3.Url), filePath);
client.DownloadProgressChanged += client_DownloadProgressChanged;
client.DownloadFileCompleted += client_DownloadFileCompleted;
DateTime start = DateTime.Now;
bool notDownload = false;
downloadComplete = false;
while (!downloadComplete) {
DateTime now = DateTime.Now;
TimeSpan ts = now - start;
int min = ts.Minutes;
int sec = ts.Seconds;
if (10 < sec && 0 == downloadProgress) {
notDownload = true;
client.CancelAsync();
break;
}
if (min == 1) {
notDownload = true;
client.CancelAsync();
break;
}
Thread.Sleep (30);
}
if (!notDownload) {
client.CancelAsync();
client.OpenRead (mp3.Url);
int downloadedFileSize = Convert.ToInt32 (client.ResponseHeaders["Content-Length"]);
FileInfo localFile = new FileInfo (filePath);
if (localFile.Length == downloadedFileSize) {
wasDownload = true;
}
}
}
catch {
downloadProgress = 0;
downloadComplete = false;
}
finally {
client.CancelAsync();
client.Dispose();
downloadComplete = false;
downloadProgress = 0;
GC.Collect();
if (!wasDownload) {
if (File.Exists (filePath)) {
FileSecurity fs = File.GetAccessControl (filePath);
File.Delete (filePath);
}
}
Application.Current.Dispatcher.BeginInvoke (
DispatcherPriority.Background,
new Action (() =>
MainWindow.label3.Content = ""
));
}
return wasDownload;
}
도와주세요! 이 (내가 웹 클라이언트를 배치) 왜 찾을 수 없습니다 다른 프로세스File.Delete 다른 프로세스에서 사용 중이기 때문에 프로세스가 파일에 액세스 할 수 없습니다.
사용 중이기 때문에
File.delete를 프로세스가 파일을 액세스 할 수 없습니다 : 나는 가끔 예외를 얻을.
당신은 정말로 자주 자신을 '배출'해서는 안됩니다. –
MP3 파일이 이미 다른 사람이나 다른 프로그램에서 열어 놓은 경우에 사용하십시오. try/catch, dispose, gc 측에서 키워드를 사용하면 모든 코드가 처리됩니다. 마침내 당신은 아무것도 복잡한 일을해서는 안됩니다. –
client.OpenRead는 꽤 의문의 여지가 있습니다. 이 코드는 예외 안전이 아니며, 예외는 Dispose() 호출을 우회하여 전혀 진단을 생성하지 않습니다. 음, "파일이 사용 중"이 아닌 것. –