COPIAR DIRETÓRIO E ARQUIVO

 Tópico anterior Próximo tópico Novo tópico

COPIAR DIRETÓRIO E ARQUIVO

C#

 Compartilhe  Compartilhe  Compartilhe
#493896 - 22/05/2020 17:22:00

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Última edição em 23/05/2020 14:00:13 por ALVAROVB2009

Pessoal estou começando no C# e estou apanhando um pouco com os comandos, estou a uns dias nisso e não consigo encontrar a forma para finalizar
Minha idéia é criar um backup, igual o Cobian por exemplo, só que esse lugar para onde será jogado os arquivos será gerenciado pela minha empresa, tendo algumas limitações de acesso e etc
Bom quero pegar os arquivos que o cliente ja tem no backup e comparar para saber se teve alteração ou não

No exemplo abaixo, consigo verificar se o diretório raiz ja esta ou não no backup

//*Pegar todo o conteúdo do diretório destino ( pasta / subpastas e arquivos )
ListObjectsRequest diretorio = new ListObjectsRequest();
diretorio.Name = "diretoriobackup";
ListObjectsResponse lista = Client.ListObjects(diretorio);

string[] nomepastainicial = pastaInicial.Split('\\');
Diretorio_Arquivo.NomeDiretorio = "diretoriobackup/" + nomepastainicial[nomepastainicial.Length - 1];

ListObject Dir = lista.ListObject.Find(x => x.Key == "/" + nomepastainicial[nomepastainicial.Length - 1]);
// Subir o diretório raiz caso não exista
If (Dir == null){
   PutObjectRequest pasta = new PutObjectRequest();
   pasta.Name = "diretoriobackup";
   pasta.Key = nomepastainicial[nomepastainicial.Length - 1];
   Client.PutObject(pasta);
};

O que quero montar é um FOR onde esteja percorrendo arquivos , diretórios e subdiretórios selecionado e dando um find na lista que ja tenho do cliente, para ver se ja existe ou não e ai gravar ele
MANUALMENTE, inclui no loop o nome das subpastas e consegui fazer isso para testar o método de gravar e esta funcionando, ou seja, não estou partindo do zero, realmente não estou sabendo fazer esse loop e fazer entrar nas pastas e subpastas e fazer a comparação

Será que alguém pode me dar uma força quanto a isso


Teoria é quando se sabe tudo, e nada funciona. Prática e quando tudo funciona e ninguém sabe porque.
"Aquele que quer aprender gosta que lhe digam quando esta errado;
só o tolo não gosta de ser corrigido -"Prov.12:1


#493902 - 22/05/2020 23:25:34

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
As duas pastas são locais? Digo, acessíveis pelo explorer normal?


_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#493910 - 23/05/2020 11:00:37

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Kerplunk obrigado pelo retorno

Não, elas não acessíveis, o backup será feito para fora do estabelecimento do cliente, será feito para nosso servidor e a única conexão será pelo meu sistema

Terá uma id e senha especial e quando se conecta eu já pego todo o conteúdo do backup dele que esta no código abaixo, e pretendo deixar essa lista acessível em todo sistema, para poder ser feita a comparação de qqer lugar, como comentei ainda estou iniciando, sei que terei que ter uma classe para poder guardar essa informação, se fosse em um VB6 , eu iria criar uma variável Global e ai disponibilizar, más no momento o que quero é fazer essa comparação
//*Pegar todo o conteúdo do diretório destino ( pasta / subpastas e arquivos )
ListObjectsRequest diretorio = new ListObjectsRequest();
diretorio.Name = "diretoriobackup";
ListObjectsResponse lista = Client.ListObjects(diretorio)

Como teste tenho a seguinte estrutura
Pasta Raiz
  arquivo1
  arquivo2
  Pasta 1
    Arquivo 1
    Arquivo 2
    Pasta 1.1
      Arquivo 1.1
      Arquivo 2.1
  Pasta 2
    Arquivo 1
    Arquivo 2
    Pasta 2.1
      Arquivo 1.2
      Arquivo 2.2
    Pasta 2.2
      Arquivo 1.2
      Arquivo 2.2
      Arquivo 3.2

Manualmente dentro do FOR, eu fui colocando o caminho na mão e os arquivos subiram normal e na comparação também, agora por não conhecer totalmente o C# e seus comandos, não estou ajustando para fazer ele automaticamente implementar as pastas e subpastas e ir comparando.

Minha rotina esta pronta na minha cabeça e no papel, a idéia já esta rodando manualmente, más me falta isso.

Pesquisando e tantando achar alguma projeto ou idéia poder adaptar para o que eu preciso, a melhor que achei foi no Macoratti ( Arvore de diretório e arquivos ) , porém ainda não consegui fazer uma adaptação

Teoria é quando se sabe tudo, e nada funciona. Prática e quando tudo funciona e ninguém sabe porque.
"Aquele que quer aprender gosta que lhe digam quando esta errado;
só o tolo não gosta de ser corrigido -"Prov.12:1


#493936 - 25/05/2020 16:58:58

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Alguém pode me dar uma ajuda nesse loop

Teoria é quando se sabe tudo, e nada funciona. Prática e quando tudo funciona e ninguém sabe porque.
"Aquele que quer aprender gosta que lhe digam quando esta errado;
só o tolo não gosta de ser corrigido -"Prov.12:1


#493938 - 25/05/2020 19:53:25

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Acho que você não entendeu minha pergunta, vamos de novo:
Seu programa vai ter acesso às pastas dos arquivos, ele vai poder ler essas pastas?

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#493944 - 26/05/2020 14:07:55

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Sim, ele terá acesso, pois terá que fazer o backup das pastas

O cliente ira selecionar a pasta que deseja fazer o backup e o sistema irá fazer, agora o lugar que será feito, esse não será visível para o usuário
Quando o sistema iniciar o backup, fará uma primeira varredura no que já tem no backup e irá comparar cada arquivo para saber teve alteração

Teoria é quando se sabe tudo, e nada funciona. Prática e quando tudo funciona e ninguém sabe porque.
"Aquele que quer aprender gosta que lhe digam quando esta errado;
só o tolo não gosta de ser corrigido -"Prov.12:1


#493946 - 26/05/2020 15:10:48

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Algo assim>:

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
    {
        DirectoryInfo dir = new DirectoryInfo(sourceDirName);
        DirectoryInfo[] dirs = dir.GetDirectories();

        if (!dir.Exists)
        {
            throw new DirectoryNotFoundException(
                "Pasta origem não existe: "
                + sourceDirName);
        }

        if (!Directory.Exists(destDirName))
        {
            Directory.CreateDirectory(destDirName);
        }

        // Busca os arquivos na pasta origem e copia para o destino
        // aqui verifique se o arquivo já existe, se é o mesmo tamanho, data ou qualquer outra verificação que queira
        FileInfo[] files = dir.GetFiles();
        foreach (FileInfo file in files)
        {
            string temppath = Path.Combine(destDirName, file.Name);
            file.CopyTo(temppath, false);
        }

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
    {
        // Get the subdirectories for the specified directory.
        DirectoryInfo dir = new DirectoryInfo(sourceDirName);
        DirectoryInfo[] dirs = dir.GetDirectories();

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

        // 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);
        }

        // Copiando sub diretórios.
        if (copySubDirs)
        {
            foreach (DirectoryInfo subdir in dirs)
            {
                string temppath = Path.Combine(destDirName, subdir.Name);
                DirectoryCopy(subdir.FullName, temppath, copySubDirs);
            }
        }
    }
        if (copySubDirs)
        {
            foreach (DirectoryInfo subdir in dirs)
            {
                string temppath = Path.Combine(destDirName, subdir.Name);
                DirectoryCopy(subdir.FullName, temppath, copySubDirs);
            }
        }
    }


_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#493947 - 26/05/2020 15:44:33

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Vlw Kerplunk, vou dar uma analisada e ajustar para o que eu preciso

Teoria é quando se sabe tudo, e nada funciona. Prática e quando tudo funciona e ninguém sabe porque.
"Aquele que quer aprender gosta que lhe digam quando esta errado;
só o tolo não gosta de ser corrigido -"Prov.12:1


 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário