Est-ce string.Trim () * jamais enlever les caractères valides * à partir d'un nom de fichier?
-
09-09-2019 - |
Question
Je crée une classe pour stocker un nom de fichier. Pour ce faire, je dois savoir exactement quels sont les caractères invalides et exactement quels sont les caractères invalides comme le premier / caractères de fin .
trims Explorateur Windows avant et arrière caractères blancs espace automatiquement lorsque vous nommez un fichier, donc je dois couper les mêmes caractères lors de la construction d'une instance de nom de fichier.
Je pensais à l'aide string.Trim (), mais il serait naïf de croire le jeu de caractères par défaut, il coïncide exactement avec les garnitures les caractères de nom de fichier principal / arrière non valide de l'OS.
Documentation pour string.Trim () dit qu'il trims les caractères suivants par défaut: U + 0009, U + 000A, U + 000B, U + 000C, U + 000D, U + 0020, U + 0085, U + 00A0, U + 1680, U + 2000, U + 2001, U + 2002, U + 2003, U + 2004, U + 2005, U + 2006, U + 2007, U + 2008, U + 2009, U + 200A, U + 200B, U + 2028, U + 2029, U + 3000, U + FEFF
Malheureusement, certains des caractères ci-dessus ne sont pas invalides dans un fichier, parce qu'ils ne sont pas dans le jeu de caractères retourné par System.IO.Path.GetInvalidFileNameChars.
Suis-je donc exact que string.Trim () pourrait retirer de premier plan / caractères de fin VALIDE d'un nom de fichier, le nom du fichier corrompt donc?
Quels sont exactement les personnages principaux / arrière invalide pour un nom de fichier dans le système d'exploitation Windows Vista? Je comprends qu'ils ne sont pas nécessairement les mêmes que le système de fichiers lui-même, étant donné que le système d'exploitation peut fonctionner sur différents systèmes de fichiers.
La solution
Suis-je donc exact que string.Trim () pourrait supprimer VALIDE principaux / caractères de fin à partir d'un nom, corrompt donc la nom de fichier?
Oui. D'autant plus sur un système de type UNIX, où « X » est un nom de fichier valide et distinct de « x »
Autres conseils
Les noms de fichiers peut commencer / fin dans les espaces. Trim les éliminer.
Les noms de fichiers ne peuvent pas contenir
/ \ : * ? " | < >
Ce code exécute et crée le fichier:
Imports System.IO
Module Module1
Sub Main()
Dim fs As New FileStream("d:\temp\ file . foo ", FileMode.Create, _
FileAccess.Write)
'declaring a FileStream and creating a word document file named file with
'access mode of writing
Dim s As New StreamWriter(fs)
'creating a new StreamWriter and passing the filestream object fs as argument
s.BaseStream.Seek(0, SeekOrigin.End)
'the seek method is used to move the cursor to next position to avoid text to be
'overwritten
s.WriteLine("This is an example of using file handling concepts in VB .NET.")
s.WriteLine("This concept is interesting.")
'writing text to the newly created file
s.Close()
End Sub
End Module
NOTE: le nom réel du fichier créé avec le code ci-dessus semblent être « fichier foo. ». Si je modifier le nom du fichier dans l'explorateur de l'espace est pas là, mais quand je le code ci-dessus exécutez à nouveau, il remplace le fichier.
NOTE: Je pris le code de http://www.startvbdotnet.com/files/ default.aspx et ajouté les espaces
NOTE:. Je remarque que l'Explorateur renomme ne vous permet d'ajouter les espaces de Vista avant ou après le nom de fichier, vous pouvez faire «foo txt » mais pas « foo.txt » en utilisant cette méthode