Diretório renomeação com mesmo nome caso diferente
Pergunta
Eu estou tentando mudar o nome de um diretório no c # para um nome que é o mesmo apenas com diferentes caso.
Por exemplo: f: \ teste para f: \ TEST
Eu tentei este código:
var directory = new DirectoryInfo("f:\\test");
directory.MoveTo("f:\\TEST");
e eu recebo um IOException - Fonte e caminho de destino devem ser diferentes. Eu também tentei Directory.Move () com o mesmo resultado.
Como isso é feito? Eu tenho que criar um diretório temporário separado, mover os arquivos contidos no diretório original para o diretório temp, e depois excluir o original, e mudar o nome do diretório temporário?
Solução
Bem, você não precisa criar um diretório e movimento separado tudo. Apenas mudar o nome da pasta para algo diferente e depois de volta para o nome que deseja:
var dir = new DirectoryInfo(@"F:\test");
dir.MoveTo(@"F:\test2");
dir.MoveTo(@"F:\TEST");
Outras dicas
Por que não mudar o nome do temp
diretório e, em seguida, mudar o nome novamente para TEST
?
Mesmo se o método .NET DirectoryInfo.MoveTo
lança uma exceção se o nome é o mesmo, você pode chamar a API do Windows MoveFile
função como esta para definir o invólucro do nome do diretório:
bool success = MoveFile(dirInfo.FullName, dirInfo.FullName);
Com esta declaração externo:
[DllImport("kernel32", SetLastError = true)]
private static extern bool MoveFile(string lpExistingFileName, string lpNewFileName);
Ele funciona muito bem quando o nome é diferente no caso apenas para mim. Eu não tentei chamá-lo assim quando o nome já é exatamente como especificado.
Isto tem a vantagem de que o diretório nunca desaparece sob o seu nome original.
Tem a desvantagem no entanto, que ele só funciona no Windows.
A resposta é sim, neste caso - o próprio sistema de arquivo não ver os dois como diferente, então você vai precisar excluir eo suplemento como o novo nome (ou mover / / movimento de exclusão como você sugeriu)