System.IO.Stream iStream = nulo;
// Búfer para leer 10K bytes en fragmentos:
byte[] buffer = nuevo Byte[10240];
// Longitud del archivo:
longitud interna;
// Total de bytes a leer:
datos largos para leer;
// Identifica el archivo a descargar incluyendo su ruta.
ruta de archivo de cadena = @"E:softwareSQL Server 2000 Personal Edition.ISO";
//Identifica el nombre del archivo.
nombre de archivo de cadena = System.IO.Path.GetFileName (ruta de archivo);
intentar
{
//Abre el archivo.
iStream = nuevo System.IO.FileStream (ruta de archivo, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
Respuesta.Clear();
// Total de bytes a leer:
datosToRead = iStream.Length;
largo p = 0;
if(Solicitud.Encabezados["Rango"]!=null)
{
Respuesta.StatusCode = 206;
p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}
si(p!= 0)
{
Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
}
Response.AddHeader("Content-Length",((long)(dataToRead-p)).ToString());
Response.ContentType = "aplicación/flujo de octeto";
Response.AddHeader("Content-Disposition", "adjunto; nombre de archivo=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(nombre de archivo)));
iStream.Posición = p;
datosParaLeer = datosParaLeer - p;
// Lee los bytes.
mientras (datosParaLeer > 0)
{
// Verifica que el cliente esté conectado.
si (Respuesta.IsClientConnected)
{
// Lee los datos en el buffer.
longitud = iStream.Read(búfer, 0, 10240);
// Escribe los datos en el flujo de salida actual.
Response.OutputStream.Write(búfer, 0, longitud);
// Vacía los datos a la salida HTML.
Respuesta.Flush();
buffer= nuevo Byte[10240];
dataToRead = dataToRead - longitud;
}
demás
{
//evitar bucle infinito si el usuario se desconecta
datosParaLeer = -1;
}
}
}
captura (Excepción ex)
{
// Atrapa el error, si lo hay.
Response.Write("Error: " + ex.Mensaje);
}
finalmente
{
si (iStream! = nulo)
{
//Cierra el archivo.
iStream.Close();
}
Respuesta.End();
}