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?

Foi útil?

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)

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