System.IO.Stream iStream = null ;
// Tampon pour lire 10 Ko d'octets en bloc :
octet[] tampon = nouvel octet[10240];
// Longueur du fichier :
longueur entière ;
// Total d'octets à lire :
données longuesÀLire ;
// Identifiez le fichier à télécharger, y compris son chemin.
string filepath = @"E:softwareSQL Server 2000 Personal Edition.ISO";
// Identifiez le nom du fichier.
chaîne nom de fichier = System.IO.Path.GetFileName (chemin de fichier);
essayer
{
// Ouvre le fichier.
iStream = nouveau System.IO.FileStream (chemin du fichier, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
Réponse.Clear();
// Total d'octets à lire :
dataToRead = iStream.Length;
longue p = 0 ;
if(Request.Headers["Range"]!=null)
{
Réponse.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 = "application/octet-stream" ;
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));
iStream.Position = p;
dataToRead = dataToRead - p;
// Lit les octets.
tandis que (dataToRead > 0)
{
// Vérifiez que le client est connecté.
si (Response.IsClientConnected)
{
// Lit les données dans le tampon.
longueur = iStream.Read (buffer, 0, 10240);
// Écrit les données dans le flux de sortie actuel.
Response.OutputStream.Write(tampon, 0, longueur);
// Vide les données vers la sortie HTML.
Réponse.Flush();
buffer= nouvel octet[10240] ;
dataToRead = dataToRead - longueur ;
}
autre
{
// empêche une boucle infinie si l'utilisateur se déconnecte
dataToRead = -1 ;
}
}
}
attraper (Exception ex)
{
// Trappe l'erreur, le cas échéant.
Response.Write("Erreur : " + ex.Message);
}
enfin
{
si (iStream != null)
{
//Ferme le fichier.
iStream.Close();
}
Réponse.End();
}