C #: Faixa de Caracteres ilegais de uma string filename
-
05-07-2019 - |
Pergunta
Por que não vai este fazer qualquer coisa, a saída é idêntico ao de entrada? Estou perplexo !!!
string name = ";;;'']][[ zion \\\[[[]]]"
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Solução
EDIT:
Eu acho que pode ser apenas um caso de dados de teste imperfeito (junto com a mudança de função que já foi sugerido). Tente isto:
string name = "tru\\e.jpg";
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);
Eu recebo saída "true.jpg". Eu definitivamente sugerem muito mais testes antes de usar este na produção! :)
Outras dicas
Get caracteres de arquivos inválidos usando,
char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();
O que você quer dizer com isso não vai fazer nada? Eu corri o seguinte em um aplicativo de console:
string name = ";;;'']][[ zion \\\\[[[]]]";
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);
A propósito sua sintaxe estava errado, você tinha alguns personagens unescaped e que estava faltando um ponto e vírgula.
E eu tenho o seguinte resultado.
;;;'']][[ zion \\[[[]]]
Qual é o resultado correto. Talvez você deve fazer uma nova pergunta sobre o que você está tentando fazer, porque a sua abordagem atual parece indicar que você não tem uma forte compreensão de Regex.
Atualizar : Você está tentando verificar os nomes dos arquivos? Se assim você provavelmente vai querer usar:
System.IO.Path.GetInvalidFileNameChars();
Atualizar :
Aqui está uma lista de caracteres inválidos que vem do que GetInvalidPathChars()
método
RealInvalidPathChars = new char[] {
'"', '<', '>', '|', '\0', '\x0001', '\x0002', '\x0003', '\x0004', '\x0005', '\x0006', '\a', '\b', '\t', '\n', '\v',
'\f', '\r', '\x000e', '\x000f', '\x0010', '\x0011', '\x0012', '\x0013', '\x0014', '\x0015', '\x0016', '\x0017', '\x0018', '\x0019', '\x001a', '\x001b',
'\x001c', '\x001d', '\x001e', '\x001f'
};
Então, basicamente, os seguintes são caracteres de caminho inválido podem incluir caracteres ASCII / Unicode de 1 a 31, bem como aspas ( "), menor que (<), maior que (>), pipe (|), de retrocesso (\ b ), nulo (\ 0) e tabulação (\ t).
Nenhum dos quais parecem ocorrer em sua seqüência original.