In der Klassenbibliothek des .NET Frameworks findet sich das ein oder andere Heinzelmännchen, das den Job Quasi über Nacht von alleine erledigt für den man bisher richtig Aufwand treiben musste. Nehmen wir nur mal als Beispiel das extrahieren einer Extension aus einem UNC Pfad.
E:WINNTSYSTEM32WIN.INI
Der langjährige Programmierer schreibt sich für solche und ähnliche Aufgaben seine eigene Klassenbibliothek. Nun diese Aufgabe würde nun für .NET auch anstehen. Diese Zeit können Sie sich sparen, den im NameSpace System.IO finden sich einige interessante Klassen die einem diese Mühe ersparen.
Noch ein Hinweis an alle Entwickler die glauben, das eine Sprache ohne eigenes Framework sowieso nicht zu gebrauchen ist. Lesen Sie weiter und Sie werden begeistert sein! (um keine härteren Worte zu gebrauchen)
System.IO enthält allgemein Klassen für Filezugriff.
BinaryReader
FileInfo
PathTooLongException
BinaryWriter
FileLoadException
SeekOrigin
BufferedStream
FileMode
Stream
Directory
FileNotFoundException
StreamReader
DirectoryInfo
FileShare
StreamWriter
DirectoryNotFoundException
FileStream
StringReader
EndOfStreamException
FileSystemInfo
StringWriter
File
IOException
TextReader
FileAccess
MemoryStream
TextWriter
FileAttributes
Path
Im besonderen möchte ich auf die letzte Klasse PATH eingehen. Eigentlich mehr durch Zufall bin ich auf diese gestossen und war begeistert von den Möglichkeiten. Offen blieb eigentlich nur die Frage:wie habe ich bisher ohne leben können?
Die Methoden im Detail sind vom Namen (wie oft im Framework) selbsterklärend. Obige Aufgabe (das extrahieren der Extension) wird über die Funktion GetExtension erledigt.
ChangeExtension ( String path , String extension )
Combine ( String path1 , String path2 )
GetDirectoryName ( String path )
GetExtension ( String path )
GetFileName ( String path )
GetFileNameWithoutExtension ( String path )
GetFullPath ( String path )
GetPathRoot ( String path )
GetTempFileName ( )
GetTempPath ( )
HasExtension ( String path )
IsPathRooted ( String path )
Besondere Beachtung verdienen allerdings auch noch die eingebauten Konstanten. Diese sind Namentlich in alphabetischer Reihenfolge ;-)
AltDirectorySeparatorChar
DirectorySeparatorChar
InvalidPathChars
PathSeparator
VolumeSeparatorChar
Warum brauche ich diese? Eine übliche vorgehensweise bei Fileoperationen im ASP Bereich ist:
Pfad=Server.Mappath(".")+""+filename+".txt" |
Der echte Pfad wird (nach wir vor) durch die Server Funktion Mappath ausgelesen. Leider ( oder auch und das ist gut so) ohne den vom Betriebssystem benötigten "". Da das .NET Framework in naher Zukunft wahrscheinlich auf anderen System wie z.B. Linux verfügbar sein wird, wäre eine solche Zeile Code ein programmierter Bug. Linux erwartet einen "/" als Pfadtrenner. Auch heute schon kann eine Fileresource von einem Linuxserver aus .NET genutzt werden. Das Szenario liegt also nicht mehr in weiter Ferne.
Der Clou ist nun den PathSeperator aus der Path Klasse zu verwenden. Der Repräsentiert den für das System passenden Trenner.
Im folgenden ein paar Zeilen Code mit der ein File nach einem Upload gespeichert wird. Der Filename aus dem HTML File Control enthält den vollen Client Pfad. Über GetFilename wird der pure Dateiname erzeugt. Beim Speichern wird dann der Directoryseperator eingebunden.
Dim FileName As String FileName = path.getfilename(File1.PostedFile.FileName()) If FileName > "" Then File1.PostedFile.SaveAs(Server.MapPath(".") & Path.DirectorySeparatorChar & FileName) End If |
Dieser Artikel bezieht sich auf die Beta 2 des .NET Frameworks.