C# 在使用C下载文件之前等待该文件#
我使用C#通过url下载不同的文件,然后从系统中的物理文件路径运行它们,但是我需要等待文件完全写入,然后再运行它。原因是有些文件需要比其他文件更多的时间才能保存,而我不能真正使用Thread.Sleep()来实现这一目的 我尝试了这段代码,但由于某些原因,它没有那么灵活,因为我真的不知道有多少次尝试,或者在保存文件之前应该花多少时间。这始终取决于internet连接以及文件大小C# 在使用C下载文件之前等待该文件#,c#,.net,filestream,C#,.net,Filestream,我使用C#通过url下载不同的文件,然后从系统中的物理文件路径运行它们,但是我需要等待文件完全写入,然后再运行它。原因是有些文件需要比其他文件更多的时间才能保存,而我不能真正使用Thread.Sleep()来实现这一目的 我尝试了这段代码,但由于某些原因,它没有那么灵活,因为我真的不知道有多少次尝试,或者在保存文件之前应该花多少时间。这始终取决于internet连接以及文件大小 WebClient client = new WebClient(); var downloadTask
WebClient client = new WebClient();
var downloadTask = client.DownloadFileTaskAsync(new Uri(url), filepath);
var checkFile = Task.Run(async () => await downloadTask);
WaitForFile(filepath, FileMode.CreateNew);
-
FileStream WaitForFile(字符串完整路径,文件模式)
{
对于(int numTries=0;numTries<15;numTries++)
{
FileStream fs=null;
尝试
{
fs=新文件流(完整路径,模式);
返回fs;
}
捕获(IOException)
{
如果(fs!=null)
{
fs.Dispose();
}
睡眠(50);
}
}
返回null;
}
有没有办法一直等到文件.Length>0
我将感谢任何帮助
谢谢。您可以使用FileSystemWatcher在文件大小更改或出现新文件时获取事件 但是,除非您知道文件的大小,否则无法通过这种方式确定文件是否已完全下载
您只需更改下载文件的代码,以便它在下载文件时发出通知。您不需要等待文件完成下载。或者更好的说法是,你在等待,在不同的线程中,然后把结果扔掉。只需使用相同的方法等待,您就不再需要单独的方法来知道文件何时下载
WebClient client = new WebClient();
await client.DownloadFileTaskAsync(new Uri(url), filepath);
我想这就是你所要做的:
WebClient client = new WebClient();
await client.DownloadFileTaskAsync(new Uri(url), filepath);
// code continues when the file finishes downloading
如何下载文件?显示下载文件的相关代码。您可以在那里等待,而不是监视文件系统。谢谢。我在帖子上加了这个!有没有什么原因让你不去做
var checkFile=wait downloadTask代码>?你提到下载多个文件,你能多加一点代码让整体画面更清晰吗?不,它们是独立的单个文件!我没有回答这个问题,而是倾向于评论,因为周围的代码可能是用于并行下载所有文件的,这实际上阻止了并行化:)
WebClient client = new WebClient();
await client.DownloadFileTaskAsync(new Uri(url), filepath);
// code continues when the file finishes downloading