Pergunta

Estou criando uma classe para armazenar um nome de arquivo. Para fazer isso, eu preciso saber exatamente quais caracteres são inválidos e exatamente quais caracteres são inválidos como líder / caracteres à direita .

Windows Explorer apara esquerda e à direita caracteres de espaço em branco automaticamente ao nomear um arquivo, então eu preciso aparar as mesmas personagens ao construir uma instância de nome de arquivo.

Pensei em usar string.Trim (), mas seria ingênuo supor o conjunto padrão de caracteres que corta coincide exatamente com o líder inválido / arrastando caracteres nome do arquivo do OS.

Documentação para string.Trim () diz que apara os seguintes caracteres por padrão: 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

Infelizmente, alguns dos personagens acima não são inválidos em um arquivo, porque eles não estão no conjunto de caracteres retornado por System.IO.Path.GetInvalidFileNameChars.

Am I depois correcta que string.Trim () poderia potencialmente remover líder VÁLIDO / fuga caracteres a partir de um nome de ficheiro, por conseguinte, corromper o nome do ficheiro?

O que são exatamente o líder inválido / arrastando caracteres para um nome de arquivo no Windows Vista OS? Eu entendo que eles não são necessariamente o mesmo que o próprio sistema de arquivo, uma vez que o sistema operacional pode ser executado em diferentes sistemas de arquivos.

Foi útil?

Solução

Am I seguida correto que string.Trim () poderia remover VÁLIDO levando / fuga caracteres a partir de um nome do ficheiro, por conseguinte, corromper o filename?

Sim. Ainda mais em um UNIX-like sistema, onde 'X' é um nome de arquivo válido e distinto de 'x'

Outras dicas

Nomes de arquivos pode começar / fim em espaços. Guarnição vai eliminá-los.

Os nomes dos arquivos não pode conter

/ \ : * ? " | < >

Este código é executado e cria o arquivo:

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: o nome real do arquivo criado com o código acima parecem ser "arquivo foo.". Se eu editar o nome do arquivo no Explorer o espaço não está lá, mas quando eu voltar a executar o código acima, ele substitui o arquivo.

NOTA: Eu levei o código http://www.startvbdotnet.com/files/ default.aspx e adicionados os espaços

NOTA:. Eu aviso que o Explorer renomeação do Vista não vai deixar você adicionar os espaços antes ou depois de nome de arquivo, para que você possa fazer. "Foo txt", mas não "foo.txt" usando esse método

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top