System.IO.Stream iStream = null;
// Buffer para ler 10K bytes em pedaços:
byte[] buffer = novo Byte[10240];
// Comprimento do arquivo:
comprimento interno;
// Total de bytes a serem lidos:
dados longos para ler;
// Identifique o arquivo para download incluindo seu caminho.
string caminho do arquivo = @"E:softwareSQL Server 2000 Personal Edition.ISO";
//Identifica o nome do arquivo.
string nome do arquivo = System.IO.Path.GetFileName (caminho do arquivo);
tentar
{
//Abra o arquivo.
iStream = novo System.IO.FileStream(caminho do arquivo, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
Response.Clear();
// Total de bytes a serem lidos:
dataToRead = iStream.Length;
longo p = 0;
if(Request.Headers["Range"]!=nulo)
{
Response.StatusCode = 206;
p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}
se(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 = "aplicativo/fluxo de octetos";
Response.AddHeader("Disposição de conteúdo", "anexo; nome do arquivo = " + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(nome do arquivo)));
iStream.Position = p;
dadosToRead = dadosToRead - p;
//Leia os bytes.
enquanto (dataToRead > 0)
{
// Verifique se o cliente está conectado.
if (Response.IsClientConnected)
{
//Leia os dados no buffer.
comprimento = iStream.Read(buffer, 0, 10240);
// Grava os dados no fluxo de saída atual.
Response.OutputStream.Write(buffer, 0, comprimento);
// Libera os dados para a saída HTML.
Response.Flush();
buffer= novo Byte[10240];
dataToRead = dataToRead - comprimento;
}
outro
{
// evita loop infinito caso o usuário se desconecte
dadosToRead = -1;
}
}
}
pegar (exceção ex)
{
// Captura o erro, se houver.
Response.Write("Erro: " + ex.Mensagem);
}
finalmente
{
if (iStream! = nulo)
{
//Fecha o arquivo.
iStream.Close();
}
Response.End();
}