我已使用此代码从网络服务器下载了一个zip文件:
client.DownloadFileAsync(url, savePath);
然后,在另一种方法中,在同一会话期间,我尝试使用此方法提取文件:
ZipFile.ExtractToDirectory(zipPath, extractDir);
这会引发错误:
System.IO.IOException: 'The process cannot access the file
'C:\ProgramData\ZipFile.zip' because it is being used by another process.'
如果我重新启动程序然后解压缩文件(没有重新加载它),它会毫无问题地提取。
这对我来说没有多大意义,因为Webclient client
位于另一个方法中,因此应该被销毁......
除了上面提供的2行代码之外,没有其他任何方法可以访问该文件。
有没有办法解冻文件?
答案 0 :(得分:2)
您需要在下载完成后解压缩文件,为此,您需要使用 webclient
的 DownloadFileCompleted 事件private void DownloadPackageFromServer(string downloadLink)
{
ClearTempFolder();
var address = new Uri(Constants.BaseUrl + downloadLink);
using (var wc = new WebClient())
{
_downloadLink = downloadLink;
wc.DownloadFileCompleted += Wc_DownloadFileCompleted;
wc.DownloadFileAsync(address, GetLocalFilePath(downloadLink));
wc.Dispose();
}
}
private void Wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
UnZipDownloadedPackage(_downloadLink);
}
private void UnZipDownloadedPackage(string downloadLink)
{
var fileName = GetLocalFilePath(downloadLink);
ZipFile.ExtractToDirectory(fileName, Constants.TemporaryMusicFolderPath);
}