none
Copiar conteúdo de uma pasta com todas as subpastas e arquivos pra dentro de uma nova RRS feed

  • Pergunta

  • Estou tendo dificuldades de criar uma pasta dentro de outra e mover o conteúdo para dentro dessa nova pasta. A regra é a seguinte:

    1) Eu descompacto um arquivo .zip dentro desse diretório:C:\Teste_Zip\Destino_Teste\Temp/>. Bem se existir a pasta web, aí começa o meu negócio.

    2) Dentro da pasta web, devo criar duas pastas: FarmInterna e FarmExterna. Tudo que tiver dentro da pasta web, deve ser movido para a pasta FarmInterna e a nova pasta FarmExternaserão copiados alguns arquivos, baseado em uma outra regra. Bem, a questão toda é que ao criar a nova pasta, não consigo mover os arquivos e a pasta é deletada e não sei porque. Veja o meu código:

    private void CriaPastaFarmInterna()
            {
                string path_trabalho = ConfigurationManager.AppSettings["Target_Dir_Temp"];
                string novo_path = path_trabalho + "\\FarmInterna";
    
                DirectoryInfo dirInfo = new DirectoryInfo(novo_path);
    
                if (dirInfo.Exists == false)
                    Directory.CreateDirectory(novo_path);
    
                List<String> myFiles = Directory
                                   .GetFiles(path_trabalho, "*.*", SearchOption.AllDirectories).ToList();
    
                foreach (string file in myFiles)
                {
                    FileInfo mFile = new FileInfo(file);
                    // to remove name collusion
                    if (new FileInfo(dirInfo + "\\" + mFile.Name).Exists == false)
                        mFile.MoveTo(dirInfo + "\\" + mFile.Name);
                }            
            }

    A necessidade e criar e mover para a FarmInterna.

    segunda-feira, 14 de março de 2016 16:15

Todas as Respostas

  • testa isso:

    private void CriaPastaFarmInterna()
    {
        string path_trabalho = ConfigurationManager.AppSettings["Target_Dir_Temp"];
        string novo_path = path_trabalho + "\\FarmInterna";
    
        DirectoryInfo dirInfo = new DirectoryInfo(novo_path);
    
        if (dirInfo.Exists == false)
            Directory.CreateDirectory(novo_path);
    
        List<String> myFiles = Directory
                            .GetFiles(path_trabalho, "*.*", SearchOption.AllDirectories).ToList();
    
        foreach (string file in myFiles)
        {
            FileInfo mFile = new FileInfo(file);
            string newFile = novo_path + (file.Replace(path_trabalho, ""));
            //Talvez assim?
            //string newFile = novo_path + "\\" + (file.Replace(path_trabalho, ""));
            if (new FileInfo(newFile).Exists == false)
                mFile.MoveTo(newFile);
        }
    }

    segunda-feira, 14 de março de 2016 16:38
  • Olá Cesar, boa tarde. Então eu havia feito semelhante ao seu exemplo. A questão é a seguinte. Na FarmInterna deve conter todas as pastas e arquivos que estão dentro da Pasta web e a pasta FarmInterna deve estar dentro da pasta web. Isso tem sido o meu problema. Sempre dá o erro que já está sendo utilizado.
    segunda-feira, 14 de março de 2016 16:45
  • E se remover os arquivos de dentro do novo diretório?

    List<String> myFiles = Directory
                            .GetFiles(path_trabalho, "*.*", SearchOption.AllDirectories).Where(p => !p.StartsWith(novo_path)).ToList();

    Assim ele vai copiar todos exceto ele mesmo.

    segunda-feira, 14 de março de 2016 17:18
  • Vou testar e posto o resultado.
    segunda-feira, 14 de março de 2016 17:19
  • Refiz meu código e quando chega no foreach, ao dá um moveTo(), ele diz que não foi possível achar parte do caminho. Ou seja, ele entra com o path correto, mas como a pasta FarmInterna está vazia, deve ser isso, não existe a pasta. Abaixo o novo código.

    private void CriaPastaFarmInterna()
            {
                string path_trabalho = ConfigurationManager.AppSettings["Target_Dir_Temp"] + @"\web";
                string novo_path = path_trabalho + @"\FarmInterna";
    
                DirectoryInfo dirInfo = new DirectoryInfo(novo_path);
    
                if (dirInfo.Exists == false)
                    Directory.CreateDirectory(novo_path);
    
                List<String> myFiles = Directory.GetFiles(path_trabalho, "*.*", SearchOption.AllDirectories).ToList();
    
                List<String> myDirectories = Directory.GetDirectories(path_trabalho).ToList();
    
                var diretorios = myDirectories.Where(d => !d.Contains("FarmInterna"));
    
                foreach (var di in diretorios)
                { 
                    foreach (string file in myFiles)
                    {
                        FileInfo mFile = new FileInfo(file);
                        string newFile = novo_path + (file.Replace(path_trabalho, ""));
                        //string newFile = novo_path + "\\" + (file.Replace(path_trabalho, ""));
    
                        if (new FileInfo(newFile).Exists == false)
                            mFile.MoveTo(newFile);
                    }
                }    
            }
    segunda-feira, 14 de março de 2016 18:39
  • Você tentou substituir a linha
    string newFile = novo_path + (file.Replace(path_trabalho, ""));

    Por esta?
    string newFile = novo_path + "\\" + (file.Replace(path_trabalho, ""));

    Parece que agora é um pequeno detalhe no caminho do arquivo. Tenta coloca um break point e ver o caminho do debug.
    segunda-feira, 14 de março de 2016 19:40
  • Deu certo?
    segunda-feira, 28 de março de 2016 14:48