Я использую C# для загрузки разных файлов по URL-адресу и их последующего запуска из физического пути к файлу в системе, однако мне нужно дождаться, пока файл не будет полностью записан, и только затем запустить его. Причина в том, что для сохранения некоторых файлов потребуется больше времени, чем для других, и я не могу использовать Thread.Sleep () для этой цели.
Я пробовал этот код, но по какой-то причине он не такой гибкий , так как я не могу точно сказать, сколько попыток или сколько времени должно пройти до сохранения файла. Это всегда зависит от соединения inte rnet, а также от размера файла.
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(string fullPath, FileMode mode)
{
for (int numTries = 0; numTries < 15; numTries++)
{
FileStream fs = null;
try
{
fs = new FileStream(fullPath, mode);
return fs;
}
catch (IOException)
{
if (fs != null)
{
fs.Dispose();
}
Thread.Sleep(50);
}
}
return null;
}
Есть ли способ продолжать ждать, пока File.Length> 0?
Буду признателен за любую помощь.
Спасибо.