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

Schreiben einer Textdatei auf den Server

Geschrieben von: Christian Koller
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

Wie schon in den Artikeln Lesen von Textdateien und Dynamische Includes in ASP beschrieben, kann man von einer ASP-Seite aus den Inhalt einer Textdatei lesen und in Variablen speichern.

Dazu benutzt man die Funktionalität, die das FileSystemObject Objekt bietet. Mit Hilfe dieses Objektes kann man Dateien und Dateiattribute lesen, aber auch Text in eine Datei schreiben oder an eine Datei anhängen.

Das folgende ASP-Listing zeigt, wie einfach es prinzipiell ist, eine Textdatei auf den Server zu schreiben:

<%
 ' FileSystemObject objFs oeffnen
 Set objFs= CreateObject("Scripting.FileSystemObject")

 ' Dateiname festlegen
 strDateiname = Server.MapPath("/testdatei.txt") 

 ' Einen Textstream (objTextStream) zur Textdatei oeffnen 
 Set objTextStream = objFs.CreateTextFile(strDateiname, True)

 ' Inhalt fuer Datei in String strWriteString speichern:
 strWriteString = "Text fuer die Datei"

 ' String in Datei schreiben:
 objTextStream.Write strWriteString

 ' Objekte schliessen
 objTextStream.Close
 Set objTextStream = Nothing
 Set objFs = Nothing

 Response.Write "Der folgende Inhalt wurde in die Datei "
 Response.Write strDateiname & " geschrieben:<BR>" 
 Response.Write Replace(Server.HTMLEncode(strWriteString) , _ 
      vbCrLf,"<BR>" & vbCrLf)
%>

Der VBScript Code in diesem Listing erzeugt eine Instanz des FileSystemObject und speichert es in der Variable objFs. Danach wird der volle physikalische Pfad der zu erstellenden Datei in der Variablen strDateiname gespeichert. Ein Beispiel für eine gültige Dateiangabe wäre etwa C:\Inetpub\wwwroot\.

Die Datei selbst wird mit der Methode CreateTextFile des FileSystemObject Objektes angelegt, wobei der erste Parameter den Pfad der zu erstellenden Datei angibt, und der zweite Parameter (True oder False) angibt, ob eine bereits bestehende Datei überschrieben werden soll.

Die CreateTextFile Methode gibt ein TextStream Objekt zurück, das man benützt, um Text in die Datei zu schreiben.

Der Schreibvorgang selbst wird mittels der Write Methode des TextStream Objektes durchgeführt. Der Parameter dieser Anweisung ist der Textstring, der als Inhalt in die Datei geschrieben wird. Man kann die Write Methode mehrmals aufrufen, um auf diese Weise Text Stück für Stück in die Datei zu schreiben. Durch die Write Methode wird allerdings kein Zeilenumbruch in die Datei geschrieben - einen Zeilenumbruch muß man explizit durch vbCrLf angeben.

Alternativ zu Write kann man auch die WriteLine Methode verwenden, die nach dem Schreiben des übergebenen Textstrings automatisch einen Zeilenumbruch hinzufügt.

Probleme mit der Zugriffserlaubnis

Wenn man das obige Listing auf einem Webserver laufen lässt, so erhält man oftmals eine Fehlermeldung mit einer ähnlichen Aussage wie der folgenden:

Microsoft VBScript runtime error '800a0046' 

Permission denied 

/file1.asp, line 9 

Dieses Permission denied oder Zugriff verweigert bedeutet nichts anderes, als daß der Benutzer-Kontext (User-Kontext), in dem diese ASP Seite läuft, keine Erlaubnis zum Schreiben einer Datei besitzt. Dies sollte die standardmäßige Einstellung auf einem Internet Information Server sein.

Der Benutzername, in dessen Kontext anonym abgefragte ASP Seiten laufen, ist IUSR_Computername, also zum Beispiel IUSR_RunningMan - wenn der Server RunningMan heißt. Verlangt man von den Benutzern, daß Sie Benutzername und Kennwort beim Seitenzugriff eingeben (die "Standardloginbox" des Internet Explorer oder Netscape Navigators), so läuft die Seite dann im Kontext dieses NT Useraccounts.

Wenn man auf einem fremden Webserver hostet, so muß man den Betreiber also bitten, für den IUSR_Computername Account die Lese-/Schreibrechte für den Ordner des Root-Directories des Webservers (oder die entsprechenden Ordner) zu setzten. (Dies ist nur notwendig, wenn die Ordner mit dem NTFS Filesystem arbeiten.)

Um auf dem eigenen Webserver die Rechte umzustellen klickt man mit der rechten Maustaste auf den entsprechenden Ordner, wählt "Sicherheit" und stellt die entsprechenden Rechte ein.

Auf einem PWS (Windows 9x) sollte dieses Problem im Allgemeinen nicht auftreten, da Windows 9x standardmäß keine Userrechte für Ordner kennt.

Schlußbemerkung:

Wie gezeigt wurde ist es verhältnismäßig einfach, aus einer ASP-Seite heraus eine Textdatei zu erzeugen und Text in eine Datei zu schreiben.

Um sich die volle Funktionalität des FileSystemObject Objektes zu erschließen, empfiehlt sich ein Blick in die Dokumentation des IIS, des Platform SDK, oder der VBScript Dokumentation (zum Download bei Microsoft erhältlich).

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000725.zip

Verwandte Artikel

CSVs aus MDBs leicht gemacht
http:/www.aspheute.com/artikel/20010605.htm
Dateizugriff auf Netzlaufwerken
http:/www.aspheute.com/artikel/20010508.htm
Dynamische Includes in ASP
http:/www.aspheute.com/artikel/20000706.htm
Erstellen von XML-Dateien mit dem DOM
http:/www.aspheute.com/artikel/20011116.htm
Fehlerbehandlung richtig eingesetzt
http:/www.aspheute.com/artikel/20001011.htm
Lesen von Textdateien
http:/www.aspheute.com/artikel/20000530.htm
Ver- und entschlüsseln von Texten mit PGP
http:/www.aspheute.com/artikel/20000921.htm
Zippen und entzippen von Dateien
http:/www.aspheute.com/artikel/20001005.htm

Links zu anderen Sites

MSDN Scripting
http://msdn.microsoft.com/scripting/

 

©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.