none
Copiar e renomear uma pasta no mesmo diretório RRS feed

  • Pergunta

  • Tenho uma pasta, que sempre que ela vir no arquivo ZIP, ao extrair o arquivo ela deve ser copiada com todos os seus subdirs e arquivos e renomeada. Assim: O nome dessa pasta será sempre JTOP. Ao extrair o ZIP, ela deve receber esses nomes:

    JTOP_FARMINTERN e JTOP_FARMEXTERNA, ou seja, uma cópia com o nome FARMEXTERNA e depois renomeá-la para JTOP_FARMINTERNA. Peguei um exemplo na net e não está copiando os arquivos e subpastas.

    quinta-feira, 10 de março de 2016 13:00

Todas as Respostas

  • Posta seu código para podermos te ajudar.

    Eu uso a lib SharpZipLib e meu código para zipar é o seguinte,

    using (ZipFile zipFile = ZipFile.Create(zipFileFullName))
                {
                    zipFile.BeginUpdate();
    
                    try
                    {
                        zipFile.Add(currentFileFullName, Path.GetFileName(currentFileFullName));
                        zipFile.CommitUpdate();
                    }
                    catch
                    {
                        zipFile.AbortUpdate();
                        throw;
                    }
                }

    Para copiar uma pasta vc pode usar esse exemplo:

    https://msdn.microsoft.com/en-us/library/bb762914%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985


    quinta-feira, 10 de março de 2016 13:40
  • Esta é a função que deveria fazer isso. Um primeiro problema é que no GetDiretories(), não trás todos os diretórios da pasta. No meu exemplo são mais de 6 e só trás um.

    private void CopyRenameFolder(string sourceDirName, string destDirName, bool copySubDirs)
            {
                // Get the subdirectories for the specified directory.
                DirectoryInfo dir = new DirectoryInfo(sourceDirName);

                if (!dir.Exists)
                {
                    throw new DirectoryNotFoundException(
                        "Source directory does not exist or could not be found: "
                        + sourceDirName);
                }

                DirectoryInfo[] dirs = dir.GetDirectories();
                //string[] dirs = Directory.GetDirectories(sourceDirName, "*", SearchOption.AllDirectories);
                // If the destination directory doesn't exist, create it.
                if (!Directory.Exists(destDirName))
                {
                    Directory.CreateDirectory(destDirName);
                }

                // Get the files in the directory and copy them to the new location.
                FileInfo[] files = dir.GetFiles();
                foreach (FileInfo file in files)
                {
                    string temppath = Path.Combine(destDirName, file.Name);
                    file.CopyTo(temppath, false);
                }

                // If copying subdirectories, copy them and their contents to new location.
                if (copySubDirs)
                {
                    foreach (DirectoryInfo subdir in dirs)
                    {
                        string temppath = Path.Combine(destDirName, subdir.Name);
                        CopyRenameFolder(subdir.FullName, temppath, copySubDirs);
                    }
                }
            }

    quinta-feira, 10 de março de 2016 13:42
  • Tenta algo assim:

    //Now Create all of the directories
    foreach (string dirPath in Directory.GetDirectories(SourcePath, "*", 
        SearchOption.AllDirectories))
        Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
    
    //Copy all the files & Replaces any files with the same name
    foreach (string newPath in Directory.GetFiles(SourcePath, "*.*", 
        SearchOption.AllDirectories))
        File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath), true);

    Veja a classe copydir aqui https://msdn.microsoft.com/en-us/library/system.io.directoryinfo.aspx?f=255&MSPPError=-2147217396



    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985


    quinta-feira, 10 de março de 2016 13:47
  • André, está funcionando, mas com um pequeno detalhe para eu ajeitar e estou tendo dificuldades. Ele não começa na pasta original, assim: Tenho essa pasta originalmnte:

    jtop\projetos\teste\etc

    Quando eu extraio e copio eu passo a ter isso:

    projetos\teste\etc e falta a pasta original. Eu apanho muito trabalhando com arquivos.

    quinta-feira, 10 de março de 2016 17:21
  • Fica faltando o jtop é isso?

    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    quinta-feira, 10 de março de 2016 17:32
  • sim e depois eu preciso renomear a pasta original, mas isso é outra coisa que vou pesquisar aqui.
    quinta-feira, 10 de março de 2016 17:39
  • Poderia mandar o código que vc está usando?

    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    quinta-feira, 10 de março de 2016 17:45
  • private void CopyRenameFolder(string sourceDirName, string destDirName, bool copySubDirs)
            {
                // Get the subdirectories for the specified directory.
                DirectoryInfo dir = new DirectoryInfo(sourceDirName);

                if (!dir.Exists)
                {
                    throw new DirectoryNotFoundException(
                        "Source directory does not exist or could not be found: "
                        + sourceDirName);
                }

                foreach (string dirPath in Directory.GetDirectories(sourceDirName, "*", SearchOption.AllDirectories))
                    Directory.CreateDirectory(dirPath.Replace(sourceDirName, destDirName));

                // If the destination directory doesn't exist, create it.
                if (!Directory.Exists(destDirName))
                {
                    Directory.CreateDirectory(destDirName);
                }

                foreach (string newPath in Directory.GetFiles(sourceDirName, "*.*", SearchOption.AllDirectories))
                    File.Copy(newPath, newPath.Replace(sourceDirName, destDirName), true);
            }
    quinta-feira, 10 de março de 2016 18:15
  • Nesta parte, concatene a pasta inicial:

    foreach (string newPath in Directory.GetFiles(sourceDirName, "*.*", SearchOption.AllDirectories))
                    File.Copy(newPath, newPath.Replace(sourceDirName, "suapastainicial/"+destDirName), true);


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    quinta-feira, 10 de março de 2016 18:19
  • Não dá certo. Dá esse erro:

    Não há suporte para o formato do caminho dado.

    Tentei concatenar de várias formas e dá esse erro sempre.

    quinta-feira, 10 de março de 2016 18:32
  • Usa o método:

    System.IO.Path.Combine(string[] paths)



    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    quinta-feira, 10 de março de 2016 18:34
  • Não entendi a sua solução.
    quinta-feira, 10 de março de 2016 18:51
  • System.IO.Path.Combine(new string[] {"pastainicual", destDirName})

    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    quinta-feira, 10 de março de 2016 19:14