System.IO.Stream iStream = null;
// Puffer zum Lesen von 10 KB in Blöcken:
byte[] buffer = neues Byte[10240];
// Länge der Datei:
int Länge;
// Gesamtzahl der zu lesenden Bytes:
long dataToRead;
// Identifizieren Sie die herunterzuladende Datei einschließlich ihres Pfads.
string filepath = @"E:softwareSQL Server 2000 Personal Edition.ISO";
// Identifizieren Sie den Dateinamen.
string filename = System.IO.Path.GetFileName(filepath);
versuchen
{
// Öffne die Datei.
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
Response.Clear();
// Gesamtzahl der zu lesenden Bytes:
dataToRead = iStream.Length;
langes p = 0;
if(Request.Headers["Range"]!=null)
{
Response.StatusCode = 206;
p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}
if(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;
// Die Bytes lesen.
while (dataToRead > 0)
{
// Überprüfen Sie, ob der Client verbunden ist.
if (Response.IsClientConnected)
{
// Daten im Puffer lesen.
length = iStream.Read(buffer, 0, 10240);
// Daten in den aktuellen Ausgabestream schreiben.
Response.OutputStream.Write(buffer, 0, length);
// Die Daten in die HTML-Ausgabe schreiben.
Response.Flush();
buffer= neues Byte[10240];
dataToRead = dataToRead - Länge;
}
anders
{
//Endlosschleife verhindern, wenn der Benutzer die Verbindung trennt
dataToRead = -1;
}
}
}
Catch (Ausnahme ex)
{
// Den Fehler abfangen, falls vorhanden.
Response.Write("Fehler: " + ex.Message);
}
Endlich
{
if (iStream != null)
{
//Schließe die Datei.
iStream.Close();
}
Response.End();
}