Domanda

Sto creando una classe per memorizzare un nome di file. Per farlo, ho bisogno di sapere esattamente quali caratteri non sono validi ed esattamente quali caratteri non sono validi come leader / caratteri trailing .

Esplora risorse trim iniziali e finali automaticamente spazi vuoti quando si nomina un file, quindi ho bisogno di tagliare gli stessi personaggi quando si costruisce un'istanza nome di file.

Ho pensato di usare string.Trim (), ma sarebbe ingenuo pensare il set predefinito di caratteri che rifila coincide esattamente con il leader non valida / caratteri finali il nome del sistema operativo.

Documentazione per string.Trim () dice che rifila i seguenti caratteri per impostazione predefinita: 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

Purtroppo, alcuni dei personaggi di cui sopra non sono invalide in un file, perché non sono nel set di caratteri restituito da System.IO.Path.GetInvalidFileNameChars.

Sono io quindi corretto che string.Trim () potrebbe potenzialmente rimuovere leader VALIDA / caratteri finali da un nome di file, quindi corrompendo il nome del file?

Quali sono esattamente i leader non valida / caratteri finali per un nome di file nel sistema operativo Windows Vista? Mi rendo conto che non sono necessariamente lo stesso del file system stesso, dal momento che il sistema operativo può essere eseguito su diversi i file system.

È stato utile?

Soluzione

  

Sono io quindi corretto che string.Trim ()   potrebbe potenzialmente rimuovere VALID   iniziali / finali caratteri da una   nome file, quindi corrompere la   filename?

Sì. A maggior ragione su un sistema UNIX-like, dove 'X' è un nome di file valido e distinto da 'x'

Altri suggerimenti

I nomi dei file può inizio / fine in spazi. Trim li eliminerà.

I nomi dei file non possono contenere

/ \ : * ? " | < >

Questo codice viene eseguito e crea il file:

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

Nota: il nome effettivo del file creato con il codice di cui sopra sembra essere "file foo.". Se modifico il nome del file in Esplora lo spazio non c'è, ma quando ho eseguire nuovamente il codice di cui sopra, esso sostituisce il file.

Nota: ho preso il codice http://www.startvbdotnet.com/files/ default.aspx e ha aggiunto gli spazi

NOTA:. Ho notato che di Vista Explorer rinominare non vi permetterà di aggiungere gli spazi prima o dopo il nome del file, in modo da poter fare "foo txt", ma non "foo.txt" utilizza lo stesso metodo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top