Hoy en día el registro principal, comparte dos maneras de utilizar WebClient descargar / obtener archivos.
Hombre de pocas palabras, dijo, coloque el código.
La primera: el uso de métodos de encapsulación cliente Web: el DownloadFile () ; facilita la descarga directa.
/// <Resumen> /// descargar el archivo (WebClient.DownloadFile) /// </ Sumario> /// <param name = "downFileUrl"> dirección del enlace Descargar archivo </ param> /// <param name = " savepath "> Guardar ruta </ param> /// <Devoluciones> </ Devoluciones> pública estática cadena DownLoadFileByWebClientStatic ( cadena downFileUrl, cadena savepath) { cadena Resultado = cadena .Empty; el try { WebClient wcClient = nueva nueva del cliente Web (); wcClient.DownloadFile (downFileUrl, savepath); Resultado = " éxito descarga " ; } la captura (el WebException EX) { Resultado = $ " descarga fallida {ex.Message = Error!} " ; } retorno Resultado; } /// <summary> /// descargar el archivo (wcClient.DownloadFileAsync) /// </ Sumario> /// <param name = "downFileUrl"> dirección del enlace descargar archivo </ param> /// <param name = "savepath">Guardar la ruta </ param> /// <Devoluciones> </ Devoluciones> pública estática Cadena DownLoadFileMethod ( Cadena downFileUrl, Cadena savepath) { Cadena Resultado = Cadena .Empty; el try { WebClient wcClient = nueva nueva del cliente Web (); wcClient.DownloadDataCompleted + = (T, S) = > { el Resultado = " descarga éxito " ; // no regresa directamente (sin estado?) }; wcClient.DownloadFileAsync ( nueva nuevaUri (downFileUrl), savepath); } Catch (WebException ex) { resultado = $ " 下载失败error = {ex.Message!} " ; } Devolver resultado; }
La segunda: el uso de leer archivos de streaming descargar / obtener el archivo . (A través de la auto-test)
/// <summary> /// descarga de archivos (forma Stream Processing) /// </ resumen> /// <param name = "downFileUrl"> descargar la dirección de enlace del archivo </ param> /// <param name = " savepath "> Guardar ruta </ param> /// <Devoluciones> </ Devoluciones> pública estática cadena DownLoadFileByWebClient ( cadena downFileUrl, cadena savepath) { cadena Resultado = cadena .Empty; el try { WebClient wcClient = nueva nueva del cliente Web (); WebRequest webReq = WebRequest.Create (downFileUrl); WebResponse WebRes = webReq.GetResponse (); largo filelength = webRes.ContentLength; Stream srm = webRes.GetResponseStream (); StreamReader srmReader = nuevo StreamReader (SRM); byte [] bufferbyte = nuevo byte [filelength]; int allByte = ( int ) bufferbyte.Length; int startByte = 0 ; mientras(Filelength> 0 ) { int downByte = srm.Read (bufferbyte, StartByte, allByte); si (downByte == 0 ) PAUSA ; StartByte + = downByte; allByte - = downByte; } // detectar si existe directorio de almacenamiento de archivos si (! los File.Exists (savepath)) { cadena [] = dirArray savePath.Split ( ' \\ ' ); cadena TEMP = cadena.Vacío; para ( int i = 0 ; i <dirArray.Length - 1 ; i ++ ) { temp + = dirArray [i] .trim () + " \\ " ; si (! Directory.Exists (temp)) Directory.CreateDirectory (temp); } } Usando (FileStream fsSave = nuevo FileStream (savepath, FileMode.OpenOrCreate, FileAccess.Write)) { fsSave.Write (bufferbyte, 0, Bufferbyte.Length); fsSave.Dispose (); } // equivalente a usar ambos métodos. // los FileStream nuevos nuevos FS = el FileStream (savepath, FileMode.OpenOrCreate, FileAccess.Write); // fs.Write (bufferbyte, 0, bufferbyte.Length); srm.Close (); srmReader.Close (); // FS. el Close (); Resultado = $ " descarga éxito savepath {} = ruta " ; } la captura (el WebException EX) { Resultado = $ " ! descarga no ex.Message {} = Error "; } Devolver resultado; }
La segunda corriente de descarga de archivos, el método se conecta a obtener :( uso de OpenRead cliente Web () manera de corriente, y luego leer la secuencia de archivo, no sé por qué , la auto-prueba falló , descargue el archivo no se abre). No he encontrado una explicación razonable, espero que comentas.
/// <Resumen> /// archivo de descarga /// </ Sumario> /// <param name = "URLAddress"> recursos de la URL </ param> /// <param name = "saveBasePath"> Guardar el directorio raíz / directorio </ param> /// <volverá> </ Devoluciones> pública cadena DownFileByStream ( cadena URLAddress, cadena saveBasePath) { cadena Resultado = cadena .Empty; el try { el cliente Web Client = nueva nueva del cliente Web (); corriente STR =client.OpenRead (URLAddress); el lector StreamReader = nueva nueva del StreamReader (STR); byte [] bytes = new new byte [ 1024 * 1024 ]; // tamaño personalizado 1 M int allybytes = ( int ) bytes.Length; int startbytes = 0 ; al mismo tiempo (allybytes> 0 ) { int m = str.Read (bytes, startbytes, allybytes); // obtener la posición actual del byte de lectura IF (m == 0 ) ROTURA ; startbytes + = m; allybytes - = m; } Reader.Dispose (); str.Dispose (); string path = saveBasePath + System.IO.Path.GetFileName (URLAddress); FileStream fsWrite = nuevo FileStream (path, FileMode.OpenOrCreate, FileAccess.Write); fsWrite.Write (bytes, 0 , startbytes); fsWrite.Flush (); fsWrite.Close (); resultado = " 下载成功! " ; } la captura (Exception ex) { Resultado = " descarga no! " + ex.Message; } retorno Resultado; }
Si no son razonables, la bienvenida a eso. Estos son el historial de hoy, la mayor parte de los contenidos de este artículo se puede encontrar a la aquí sólo para hacer un poco de acabado.
Si cree que este artículo útil para usted, por favor haga clic en el botón "Favoritos"! (/: Smile) bienvenido a imprimir, por favor indique la fuente.