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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top