Procédure de programmation pour télécharger un gros fichier en C#
J'ai besoin de programmation pour télécharger un gros fichier avant de le traiter. Quelle est la meilleure façon de le faire? Comme le fichier est volumineux, je veux du temps à attendre pour que je puisse avec force la sortie.
Je sais de WebClient.DownloadFile(). Mais il ne semble pas une façon spécifique d'un montant de temps à attendre donc, comme pour forcer la sortie.
try
{
WebClient client = new WebClient();
Uri uri = new Uri(inputFileUrl);
client.DownloadFile(uri, outputFile);
}
catch (Exception ex)
{
throw;
}
Un autre moyen est d'utiliser un utilitaire de ligne de commande (wget) pour télécharger le fichier et le feu de la commande à l'aide ProcessStartInfo et l'utilisation du Processus de WaitForExit(int ms) pour forcer la sortie.
ProcessStartInfo startInfo = new ProcessStartInfo();
//set startInfo object
try
{
using (Process exeProcess = Process.Start(startInfo))
{
//wait for time specified
exeProcess.WaitForExit(1000 * 60 * 60);//wait till 1m
//check if process has exited
if (!exeProcess.HasExited)
{
//kill process and throw ex
exeProcess.Kill();
throw new ApplicationException("Downloading timed out");
}
}
}
catch (Exception ex)
{
throw;
}
Est-il un meilleur moyen? S'il vous plaît aider. Merci.
Quel est l'uri? est-il ftp?
OriginalL'auteur hIpPy | 2010-02-15
Vous devez vous connecter pour publier un commentaire.
Utiliser un WebRequest et obtenir le flux de réponse. Puis lisez à partir de la reponse Flux de blocs d'octets, et d'écrire chaque bloc dans le fichier de destination. De cette façon, vous pouvez contrôler quand s'arrêter si le téléchargement est trop long, vous en prenez le contrôle entre les morceaux et vous pouvez décider si le téléchargement a expiré basée sur une horloge:
Pour l'un, c'est synchrone. La version asynchrone de cet exemple serait très différent. Mais aussi, il jette par la très convivial WebClient façade qui cache la gestion des flux des trucs qui est largement hors de propos de 90% du temps.
orip, votre code est beaucoup plus simple. un avantage de l'utilisation de Remus code, c'est que je peux combien partie du fichier est téléchargé.
si vous préférez le WebClient.DownloadFileAsync/CancelAsync, vous pouvez utiliser le client web.DownloadProgressChanged événement au courant de la progression.
OriginalL'auteur Remus Rusanu
Comment sur l'utilisation de
DownloadFileAsync
dans la classe WebClient. La chose cool à propos de cette solution est que vous pouvez annuler l'opération en appelantCancelAsync
si elle prend trop de temps. Fondamentalement, à l'appel de cette méthode, et si un certain temps s'écoule, appel Annuler.OriginalL'auteur BFree
Demandé ici: C#: le Téléchargement d'une URL avec le délai d'attente
Solution la plus simple:
Mieux (plus souple) la solution est cette réponse à la même question, sous la forme d'un
WebClientWithTimeout
de la classe helper.Bon point, je n'étais pas au courant
OriginalL'auteur orip
Vous pouvez utiliser
DownloadFileAsync
@alibres bd'agir dit et puis essayer avec le suivant WebClient événementsEnsuite, vous pouvez connaître le Pourcentage de Progression
Espère que cette aide
OriginalL'auteur Daniel Caballero