|
Im Prinzip können Sie in Dateinamen nahezu jedes Ascii-Zeichen verwenden. Aber wie das so ist, wenn es heißt "im Prinzip...", gibt es Ausnahmen. Einige wenige Zeichen haben nämlich eine spezielle Bedeutung für die Verwaltung des Dateisystems. Nicht erlaubt sind daher die folgenden Zeichen:
\ / : * " < > |
und alle Zeichen mit einem Ascii-Code kleiner als 32.
Die folgenden Funktionen prüfen, ob ein Zeichen zu den nicht erlaubten Zeichen gehört bzw. ob es erlaubt ist - jeweils in einer Variante, der Sie ein Zeichen als String (wobei nur dessen erstes Zeichen berücksichtigt wird) oder als Ascii-Code übergeben können.
Public Function IsInvalidFSChar(Char As String) As Boolean
Select Case Asc(Char)
Case Is < 32, 92, 47, 58, 42, 63, 34, 60, 62, 124
IsInvalidFSChar = True
End Select
End Function
Public Function IsValidFSChar(Char As String) As Boolean
Select Case Asc(Char)
Case Is < 32, 92, 47, 58, 42, 63, 34, 60, 62, 124
Case Else
IsValidFSChar = True
End Select
End Function
Public Function IsInvalidFSAscii(ByVal Ascii As Integer) As Boolean
Select Case Ascii
Case Is < 32, 92, 47, 58, 42, 63, 34, 60, 62, 124, Is > 255
IsInvalidFSAscii = True
End Select
End Function
Public Function IsValidFSAscii(ByVal Ascii As Integer) As Boolean
Select Case Ascii
Case Is < 32, 92, 47, 58, 42, 63, 34, 60, 62, 124, Is > 255
Case Else
IsValidFSAscii = True
End Select
End Function
Bei den letzteren beiden Funktionen, denen der Ascii-Code eines Zeichens übergeben wird, wird auf einen Wert größer als 255 hin geprüft.
Wollen Sie die Ascii-Codes von gerade frisch in einer TextBox eingegebenen Zeichen im KeyPress-Ereignis prüfen, können Sie die folgende Funktion KeyPressValidFSAscii verwenden. Sie gibt den übergebenen Ascii-Wert nur dann zurück, wenn es sich um ein erlaubtes Zeichen handelt. Anderenfalls gibt sie 0 zurück, so dass das Zeichen nicht in der TextBox erscheint.
Public Function KeyPressValidFSAscii(ByVal KeyAscii As Integer) _
As Integer
Select Case KeyAscii
Case Is < 32, 92, 47, 58, 42, 63, 34, 60, 62, 124, Is > 255
KeyPressValidFSAscii = 0
Case Else
KeyPressValidFSAscii = KeyAscii
End Select
End Function
Analog dazu gibt die Funktion CheckValidFSChar ein ihr übergebenes Zeichen nur dann zurück, wenn es zu den erlaubten Zeichen gehört, anderenfalls gibt sie einen Leeren String zurück.
Public Function CheckValidFSChar(Char As String) As String
Select Case Asc(Char)
Case Is < 32, 92, 47, 58, 42, 63, 34, 60, 62, 124
Case Else
CheckValidFSChar = Char
End Select
End Function
Die Funktionen ContainsInvalidFSChars und ContainsNoInvalidFSChars prüfen, ob ihr übergebene längere Strings, die beispielsweise als Dateiname vorgesehen sein könnten, nicht erlaubte Zeichen enthalten.
Public Function ContainsInvalidFSChars(Str As String) As Boolean
Dim i As Integer
For i = 1 To 9
If InStr(Str, Mid$(kInvalidFileSystemChars, i, 1)) Then
ContainsInvalidFSChars = True
Exit Function
End If
Next 'i
For i = 0 To 31
If InStr(Str, Chr$(i)) Then
ContainsInvalidFSChars = True
Exit Function
End If
Next 'i
End Function
Public Function ContainsNoInvalidFSChars(Str As String) _
As Boolean
Dim i As Integer
For i = 1 To 9
If InStr(Str, Mid$(kInvalidFileSystemChars, i, 1)) Then
Exit Function
End If
Next 'i
For i = 0 To 31
If InStr(Str, Chr$(i)) Then
Exit Function
End If
Next 'i
ContainsNoInvalidFSChars = True
End Function
Die Funktion CheckInvalidFSChars gibt einen ihr übergebenen String nur dann zurück, wenn er keine nicht erlaubten Zeichen enthält.
Public Function CheckInvalidFSChars(Str As String) As String
Dim i As Integer
For i = 1 To 9
If InStr(Str, Mid$(kInvalidFileSystemChars, i, 1)) Then
Exit Function
End If
Next 'i
For i = 0 To 31
If InStr(Str, Chr$(i)) Then
Exit Function
End If
Next 'i
CheckInvalidFSChars = Str
End Function
Und nun zu guter Letzt noch die Funktion StripInvalidFSChars, die alle nicht erlaubten Zeichen aus einem übergebenen String entfernt und den "gesäuberten" String zurückgibt.
Public Function StripInvalidFSChars(Str As String) As String
Dim l As Long
Dim nStr As String
Dim nLen As Long
Dim nChar As String
nStr = Str
For l = 1 To Len(nStr)
nChar = Mid$(nStr, l, 1)
Select Case Asc(nChar)
Case Is < 32, 92, 47, 58, 42, 63, 34, 60, 62, 124
Case Else
nLen = nLen + 1
Mid$(nStr, nLen, 1) = nChar
End Select
Next 'l
StripInvalidFSChars = Left$(nStr, nLen)
End Function
|