Estou aqui programando, feliz da vida, e me enviam um bug para matar.
Ao subir um arquivo em nosso sistema Asp.NET surge o erro:
“The given path’s format is not supported.”
ou
“Não há suporte para o formato do caminho dado.” (maldita MS por traduzir mensagens de erro)
Mas eu não conseguia reproduzir o problema de nenhuma maneira. Até testar no Internet Explorer. O método que utilizo para gravar o arquivo é este:
public string Grava(HttpPostedFile postedFile, string id) { string newfilename = id + postedFile.FileName; string fullName = DirPath + newfilename; postedFile.SaveAs(fullName); return fullName; }
A chamada é realizada assim, onde fupAnexo é um controle FileUpload:
string path = anexo.Grava(fupAnexo.PostedFile, guid.ToString());
O problema está nesta propriedade: postedFile.FileName. O conteúdo dela depende de qual navegador é utilizado pelo usuário.
No IE o conteúdo é o caminho completo do arquivo no computador do usuário: C:\Pasta\Pasta\Macarrao\arquivo.xis.
No Firefox apenas o nome do arquivo: arquivo.xis.
O framework deveria uniformizar o acesso aos recursos do sistema, mas aprendo cada vez mais que não dá para confiar em dados vindos do usuário nem do sistema. Não confie em nada.
Acertei o método para o que segue:
public string Grava(HttpPostedFile postedFile, string id) { string[] filename = postedFile.FileName.Split(‘\’); string newfilename = id + filename[filename.Count() - 1]; string fullName = DirPath + newfilename; postedFile.SaveAs(fullName); return fullName; }
Falta testar o caso em que o usuário acessa o sistema a partir do Linux (ou Mac OSX) usando o Internet Explorer. Mas acho que não existam tantos loucos por aí.