Pregunta

Estoy creando una clase para almacenar un nombre de archivo. Para ello, necesito saber exactamente qué caracteres no son válidos y exactamente qué caracteres son válidos como líder / arrastrar caracteres .

Explorador de Windows recorta iniciales y finales caracteres de espacio en blanco de forma automática al nombrar a un archivo, por lo que necesita para recortar los mismos caracteres cuando se construye una instancia de nombre de archivo.

Pensé en usar string.Trim (), pero sería ingenuo suponer el conjunto predeterminado de caracteres recorta coincide exactamente con el líder no válida / arrastrar caracteres de nombre de archivo del sistema operativo.

Documentación para string.Trim () dice que se recorta los siguientes caracteres por defecto: 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

Por desgracia, algunos de los caracteres anteriores no son válidos en un archivo, porque no están en el juego de caracteres devuelto por System.IO.Path.GetInvalidFileNameChars.

¿Soy entonces correcto que string.Trim () podría eliminar potencialmente líder VÁLIDA / arrastrar caracteres de un nombre de archivo, por lo tanto, corrompiendo el nombre del archivo?

¿Qué son exactamente los principales inválida / arrastrar caracteres de un nombre de archivo en el sistema operativo Windows Vista? entiendo que no son necesariamente los mismos que el propio sistema de archivos, ya que el sistema operativo se puede ejecutar en diferentes sistemas de archivos.

¿Fue útil?

Solución

  

Estoy en lo correcto después de que string.Trim ()   potencialmente podría eliminar VÁLIDO   / personajes principales finales de una   nombre de archivo, por lo tanto, corrompiendo la   nombre de archivo?

Sí. Más aún en un sistema UNIX, donde 'X' es un nombre de archivo válido y distinta de 'x'

Otros consejos

Los nombres de archivo se puede iniciar / finalizar en los espacios. Recortar los eliminará.

Los nombres de archivo no pueden contener

/ \ : * ? " | < >

Este código se ejecuta y crea el archivo:

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: el nombre real del archivo creado con el código anterior parece ser "archivo foo.". Si puedo editar el nombre del archivo en el Explorador de que el espacio no está ahí, pero cuando vuelva a ejecutar el código anterior, se reemplaza el archivo.

NOTA: Tomé el código de http://www.startvbdotnet.com/files/ default.aspx y añade los espacios

NOTA:. Me he dado cuenta que el Explorador de Vista cambiar el nombre no va a permitir añadir los espacios antes o después del nombre del archivo, por lo que puede hacer "txt foo", pero no "foo.txt" utilizando ese método

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top