Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在使用C下载文件之前等待该文件#_C#_.net_Filestream - Fatal编程技术网

C# 在使用C下载文件之前等待该文件#

C# 在使用C下载文件之前等待该文件#,c#,.net,filestream,C#,.net,Filestream,我使用C#通过url下载不同的文件,然后从系统中的物理文件路径运行它们,但是我需要等待文件完全写入,然后再运行它。原因是有些文件需要比其他文件更多的时间才能保存,而我不能真正使用Thread.Sleep()来实现这一目的 我尝试了这段代码,但由于某些原因,它没有那么灵活,因为我真的不知道有多少次尝试,或者在保存文件之前应该花多少时间。这始终取决于internet连接以及文件大小 WebClient client = new WebClient(); var downloadTask

我使用C#通过url下载不同的文件,然后从系统中的物理文件路径运行它们,但是我需要等待文件完全写入,然后再运行它。原因是有些文件需要比其他文件更多的时间才能保存,而我不能真正使用Thread.Sleep()来实现这一目的

我尝试了这段代码,但由于某些原因,它没有那么灵活,因为我真的不知道有多少次尝试,或者在保存文件之前应该花多少时间。这始终取决于internet连接以及文件大小

   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