Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Dateien lesen in ASP.NET

Geschrieben von: Christoph Wille
Kategorie: ASP.NET

Im Artikel Directory Browsing a la .NET haben wir uns bereits das erste Mal mit dem System.IO Namespace vertraut gemacht, der uns die Klassen für die Dateiverwaltung zur Verfügung stellt. Heute werden wir uns mit den Inhalten der Dateien beschäftigen, und zwar wie man Dateien ausliest. Und das sowohl für Textdateien als auch Binärdateien - was unter ASP mit dem FileSystemObject ja nicht möglich war.

Voraussetzung um den Sourcecode dieses Artikels verwenden zu können ist eine Installation des Microsoft .NET Framework SDK's auf einem Webserver. Weiters setze ich voraus, daß der Leser die Programmiersprache C# zu einem gewissen Grad beherrscht - es finden sich etliche Artikel auf diesem Server, um das notwendige Wissen zu erlernen

Auslesen einer Textdatei

Die häufigste Aufgabe ist sicher das Auslesen von Textdateien. Und "innerhalb" dieses Aufgabenbereichs gibt es auch noch eine andere Häufigkeit: das Auslesen von gesamten Zeilen. Der folgende Sourcecode (textreader2.aspx) zeigt genau dies, und gibt sich selbst am Browser wieder aus (eine absichtliche "Sicherheitslücke").

<% @Page Language="C#" %>
<% @Import Namespace="System.IO" %>
<%
StreamReader stmReader = File.OpenText(Server.MapPath("textreader2.aspx"));
string strLine;

while (null != (strLine = stmReader.ReadLine()))
{
  strLine = Server.HtmlEncode(strLine);
  Response.Write(strLine +"<br>\r\n");
}
stmReader.Close();
%>

Das Ergebnis sieht wie folgt aus:

Nun aber zurück zum Sourcecode, um ihn einer genaueren Untersuchung zu unterziehen. Daß wir den System.IO Namespace importieren müssen, ist hoffentlich mittlerweile bei jedem in Fleisch und Blut übergegangen. Interessanter ist dann auch schon, wie ich an die Datei komme:

StreamReader stmReader = File.OpenText(Server.MapPath("textreader2.aspx"));

Ich bediene mich hier des StreamReader Objekts, welches ein bequemes textuelles Auslesen einer Datei erlaubt - ich könnte sogar automatische Zeichensatzkonvertierungen anfordern! An diesen StreamReader komme ich über die statische OpenText Methode des File Objekts, welche als Parameter nur den absoluten (physikalischen) Pfad der Datei erwartet.

Das Auslesen der Zeilen der Datei bewerkstelligt man mit Hilfe der ReadLine Methode und einer simplen while Schleife. Die Endbedingung (Dateiende erreicht) ist die, daß die ReadLine Methode null zurückliefert:

while (null != (strLine = stmReader.ReadLine()))
{
  strLine = Server.HtmlEncode(strLine);
  Response.Write(strLine +"<br>\r\n");
}

Als guter Bürger schließt man zu guter Letzt noch den verwendeten StreamReader, und das war es dann auch schon.

stmReader.Close();

Auslesen einer Binärdatei

Ich habe es in der Einleitung ja bereits erwähnt - Binärdateien waren mit dem FileSystemObject eines der "Geht nicht!" Themen. Bei ASP.NET und .NET ist dem nicht länger so, man hat sogar soviel Auswahl, daß ich heute nur auf eine der vielen Möglichkeiten eingehen möchte.

Im Beispiel binarydump.aspx lese ich die Bilddatei test.png ein (diese stammt original aus dem Artikel On-the-fly Generierung von Graphiken), und gebe Sie binär an den Client mittels Response.BinaryWrite zurück:

<% @Page Language="C#" %>
<% @Import Namespace="System.IO" %>
<%
string strFile = Server.MapPath("test.png");
Stream stmRead = File.OpenRead(strFile);

int nBufferSize = 255, nReadBytes = 0, nTotalBytes = 0;
byte[] arrByte = new byte[nBufferSize];

Response.ClearContent();
Response.ContentType = "image/png";

while (0 != (nReadBytes = stmRead.Read(arrByte, 0 , nBufferSize-1)))
{
   nTotalBytes += nReadBytes;
   if (nReadBytes == nBufferSize)
      Response.BinaryWrite(arrByte);
   else
   {
      byte[] arrCopy = new byte[nReadBytes];
      Array.Copy(arrByte, 0, arrCopy, 0, nReadBytes);
      Response.BinaryWrite(arrCopy);
   }
}

Response.End();
%>

Daß es funktioniert hat, beweist der folgende Screenshot:

Im Sourcecode möchte ich speziell auf den if Block im while Statement eingehen:

   if (nReadBytes == nBufferSize)
      Response.BinaryWrite(arrByte);
   else
   {
      byte[] arrCopy = new byte[nReadBytes];
      Array.Copy(arrByte, 0, arrCopy, 0, nReadBytes);
      Response.BinaryWrite(arrCopy);
   }

Der Grund für diesem Heck-Meck ist der, daß die BinaryWrite Methode nur ein ganzes Array schicken kann, allerdings keine Teile (in der Art: Startindex + Anzahl der zu schickenden Bytes aus dem Array). Aus diesem Grund muß ich für den letzten Datenblock, der ja (fast) immer kleiner als mein Buffer ist, eine Umkopierroutine auf ein Array der richtigen Größe einbauen. Es ist zwar nicht "schön", erfüllt aber den Zweck mehr als ausreichend.

Schlußbemerkung

Obwohl ich heute nur jeweils eine von vielen Möglichkeiten des Dateiauslesens besprochen habe, zeigen bereits diese Beispiele, daß ASP.NET gerade im Hinblick auf das Arbeiten mit Dateien die bessere, neue Zukunft ist.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Applikationen aus ASP.NET ausführen
Dateien auslesen mit VB.NET
Dateien umbenennen
Directory Browsing a la .NET
Online File Management System mit ASP.NET und C# - Teil 2
On-the-fly Generierung von Graphiken
Thumbnailgenerierung in .NET

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.