使用Webclient下载文件后无法访问文件

问题描述 投票:2回答:1

我已使用此代码从Web服务器下载了一个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位于另一种方法中,因此应该销毁...

除了上面提供的两行代码外,没有其他东西可以访问该文件。

有什么办法释放文件?

c# asp.net visual-studio webclient ioexception
1个回答
0
投票

下载完成后需要解压缩文件,为此,您需要使用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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.