Wird string.Trim () je * gültig * Zeichen aus einem Dateinamen entfernen?
-
09-09-2019 - |
Frage
Ich erstelle eine Klasse einen Dateinamen zu speichern. Um dies zu tun, muss ich genau wissen, welche Zeichen sind ungültig und genau, welche Zeichen sind ungültig als Vorder- / Hinter Zeichen .
Windows Explorer trimmt führen und white-space Zeichen automatisch Hinter, wenn eine Datei zu benennen, also muss ich die gleichen Zeichen trimmen, wenn Sie einen Dateinamen Instanz zu konstruieren.
Ich dachte über die Verwendung von string.Trim (), aber es wäre naiv, der Standard-Zeichensatz zu übernehmen es mit den ungültigen führenden genau übereinstimmt trimmt / Dateinamen Zeichen des OS Hinter.
Dokumentation für string.Trim () sagt, dass es trimmt die folgenden Zeichen standardmäßig: 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
Leider sind einige der oben genannten Zeichen nicht für ungültig in einer Datei, weil sie von System.IO.Path.GetInvalidFileNameChars zurück nicht im Zeichensatz sind.
Bin ich dann richtig, dass string.Trim () könnte möglicherweise VALID führende entfernen / Zeichen aus einem Dateinamen angehängte daher die Dateinamen korrumpieren?
Was genau die ungültige führende sind / Zeichen für einen Dateinamen in das Windows Vista OS Hinter? Ich verstehe, dass sie nicht unbedingt das gleiche wie das Dateisystem selbst sind, da das Betriebssystem auf verschiedenen laufen Dateisysteme.
Lösung
Bin ich dann richtig, dass string.Trim () könnte möglicherweise VALID entfernen Vorder- / Hinter Zeichen von a Dateiname, der daher korrumpieren Dateiname?
Ja. Noch so auf einem UNIX-ähnlichen System, wobei ‚X‘ einen gültigen Dateinamen und unterscheidet sich von ‚x‘
Andere Tipps
Dateinamen können Start / Ende in Räumen. Schneiden Sie werden sie beseitigen.
Dateinamen können nicht enthalten
/ \ : * ? " | < >
Dieser Code läuft und erstellt die Datei:
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
Hinweis: der tatsächliche Name der Datei mit dem obigen Code erstellt zu sein scheint „Datei foo.“. Wenn ich die Dateinamen im Explorer bearbeiten der Raum nicht da ist, aber wenn ich den obigen Code erneut ausführen, ersetzt er die Datei.
Hinweis: Ich habe den Code von http://www.startvbdotnet.com/files/ default.aspx und fügte hinzu, die Räume
. HINWEIS: Ich stelle fest, dass Vista Explorer umbenennen werden Sie die Leerzeichen vor oder nach dem Dateinamen nicht zulassen, hinzufügen, so können Sie machen. „Foo txt“, aber nicht „foo.txt“ mit dieser Methode