我目前正在开发一个客户端,需要一个按钮来检查目录以查看其中是否存在特定文件夹,如果不存在,它将从我的网络服务器下载 .zip 文件,下载完成后,提取说.zip 文件复制到目录。
由于某种原因,应用程序返回它已完成,但它根本没有下载任何内容。我使用了在网上找到的教程来执行此操作 ( http://www.ultimateprogrammingtutorials.info/2013/06/how-to-make-downloader-in-c.html ),并进行了一些修改。
这是我的下载代码:
下载按钮:
private void btnDownload_Click(object sender, EventArgs e)
{
if (!Directory.Exists(HardCorpsPath))
{
//MessageBox.Show("Downloading HardCorps Mod Pack (Full)", "Downloading", MessageBoxButtons.OK, MessageBoxIcon.Information);
zipFileName = "HardCorps";
HCDownloadURL = String.Format("http://www.survivaloperations.net/client/hardcorps/{0}.zip", zipFileName);
WebClient Download_Client = new WebClient();//Declaring the webclient as Download_Client
Download_Client.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//the event handler
Download_Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);// " "
Download_Client.DownloadFileAsync(new Uri(HCDownloadURL.Trim().ToString()), Arma2OAPath);// " "
//extract zip
HCZipPath = Path.Combine(Arma2OAPath, @"HardCorps.zip");
using (var zipFile = ZipFile.Read(HCZipPath))
{
zipFile.ExtractAll(Arma2OAPath, ExtractExistingFileAction.OverwriteSilently);
}
}
else
{
MessageBox.Show("Directory Validated!");
//Read users HardCorpsPath\version.txt and compare to server version.txt
//if server version > user version, download patch.zip where "patch" == the number version of the server's version.txt (ex: 1001.zip)
//On download complete, extract to HardCorpsPath and overwrite silently
}
}//close Download Button
其余:
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
pbDownloader.Value = e.ProgressPercentage;//setting the progressbar value as downloadprogress
}
private void Completed(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Downloading Successful ", "Download_Completed", MessageBoxButtons.OK, MessageBoxIcon.Information);//just a messagebox
pbDownloader.Value = (0);//resetting the progressbar
}
在应用程序尝试解压缩不存在的文件之前,我不会收到任何错误。
非常迷失和困惑,可以用一双新的眼睛来发现问题。
谢谢!
最佳答案
您的问题可能是您在应该传递文件名时将文件路径传递给 DownloadFileAsync
。
string fullFileName = Arma2OAPath + "test.zip";
Download_Client.DownloadFileAsync(new Uri(HCDownloadURL.Trim().ToString()), fullFileName );
另一个问题是
DownloadFileAsync是非阻塞的。这意味着您可以立即开始解压缩文件,而无需等待文件下载。您应该将解压缩移至 Completed()
。
关于c# - 从服务器下载文件(不下载?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20514979/