Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kinhas

Como fazer isso? [criação de pasta, comparação] C#

Recommended Posts

Bom dia a todos,

 

Desculpa por um tópico atráz do outro,

 

porém estou com uma pequena dificuldade,

 

não sei se é facil nem difícil de se resovler,

 

ai vai a dúvida então.

 

Eu estou com um código que percorre todas as pastas e arquivos de um determinado diretório.

 

Até ai beleza, porém quando ele encontra determinado arquivo preciso que ele crie uma pasta e mande todos os arquivos desta pasta, com extensões determinadas pra dentro dessa pasta nova que vai criar.

 

por exemplo.

 

Estou entrando nas pastas e arquivos. quando eu encontrei um arquivo "oi.txt" o programa detecta em qual pasta que está por exemplo D:\casa\teste (dentro da pasta teste está o arquivo "oi.txt") ai dentro desta pasta "teste" criar outra com um nome que vou determinar e jogar todos os arquivos da pasta "teste" para dentro da pasta criada, claro que esse arquivo "oi.txt" é um controlador.

 

Porém meu código só percorre as pastas,

 

eu até tenho em outro programa o código rpa criação de pastas,

 

eu tentei implementar mas deu erro de tipo de variáveis.

 

código que eu tenho (método de procura):

 

public void LimparPasta(DirectoryInfo pasta)
       {
           {

               // Obtém as subspastas da pasta atual
               var subpastas = pasta.GetDirectories();

               //Console.WriteLine("Subpastas: " + subpastas);
               // Percorre a lista de subpastas
               foreach (var p in subpastas)
               {
                   Console.WriteLine("\nPasta: " + p);
                   // Obtém a lista de arquivos dessa subpasta
                   var arquivos = p.GetFiles();

                   // Percorre a lista de arquivos da subpasta
                   foreach (var a in arquivos)
                   {
                       Console.WriteLine("\t* arquivos: " + a);
                   }
                   LimparPasta(p);
               }
           }
       }

 

Eu tentei compara a == "oi.txt",

 

porém deu erro -> Operator '==' cannot be applied to operands of type 'System.IO.FileInfo' and 'string'

 

ai não sei como fazer essa comparação,

 

alguém saberia me ajudar?

 

Muito Obrigado por qualquer resposta. =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte deu erro pelo seguinte a variável a não uma string, deve ser um objeto, essa foi a causa do erro.

Então tente encontra o método ou propriedade que retorne o nome do arquivo como por exemplo: a.GetFileName não sei se GetFileName existe, você tem que ver ai no intelisense, para que você compare o nome do arquivo com o que você quer. Sacou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ivan.Teles,

 

consegui aqui Ivan,

 

era somente colocar a.Name.

 

Agora que ferrou, preciso criar uma pasta com nome de "backup" dentro dessa pasta do "oi.txt" e jogar alguns arquivos dessa pasta para a pasta backup,

 

O problema é que não estou conseguindo pegar o path dessa pasta para fazer a criação =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei,

 

o erro ta me dando nos nervos porque está tudo meio doido,

 

as 14:30 eu saio aqui do trampo,

 

ai só vou ver amanhã o fórum,

 

vou deixar o código e vou marcar onde está dando erro por enquanto,

 

por que tem mais lugar que vai dar.

 

public void LimparPasta(DirectoryInfo pasta)
       {
           {
               int cont = 0;
               string targetPath;
               string sourcePath;
               string fileName;
               string extension;

               // Obtém as subspastas da pasta atual
               var subpastas = pasta.GetDirectories();

               //Console.WriteLine("Subpastas: " + subpastas);
               // Percorre a lista de subpastas
               foreach (var p in subpastas)
               {
                   Console.WriteLine("\nPasta: " + p + "\n");
                   // Obtém a lista de arquivos dessa subpasta
                   var arquivos = p.GetFiles();

                   // Percorre a lista de arquivos da subpasta
                   foreach (var a in arquivos)
                   {
                       if (a.Name == "BACKUP.txt")
                       {
                           Console.WriteLine("########## BACKUP na pasta " + p);
                           cont++;
                       }
                       Console.WriteLine("\t* arquivo: " + a);
                       fileName = a.Name;
                   }
                   // CRIAÇÃO DE PASTA AQUI DEPOIS DO FOREACH

                   if (cont == 1)
                   {

                       sourcePath = pasta.Name + @"\" + p.Name;
                       targetPath = pasta.Name + @"\" + p.Name + @"\backup";

                       if (System.IO.Directory.Exists(sourcePath)){
                           string[] files = System.IO.Directory.GetFiles(sourcePath);

                       // Copy the files and overwrite destination files if they already exist.
                       foreach (string s in files)
                       {

                       string sourceFile = System.IO.Path.Combine(sourcePath, fileName); //Está dando erro nesse fileName -> Use of unassigned local variable 'fileName'
                       string destFile = System.IO.Path.Combine(targetPath,fileName ); // Provavelmente dará erro aqui também.

                       if (!System.IO.Directory.Exists(targetPath))
                       {
                           System.IO.Directory.CreateDirectory(targetPath);
                       }

                       // Use static Path methods to extract only the file name from the path.
                       fileName = System.IO.Path.GetFileName(s);
                       extension = Path.GetExtension(fileName);
                       if (extension == ".vcproject")
                       {

                           destFile = System.IO.Path.Combine(targetPath, fileName);
                           System.IO.File.Copy(s, destFile, true);


                       }
                       else if (extension == ".tls")
                       {
                           destFile = System.IO.Path.Combine(targetPath, fileName);
                           System.IO.File.Copy(s, destFile, true);


                       }
                       else
                       {
                       }
                   }
               }
               else
               {
                   Console.WriteLine("Source path does not exist!");
               }
           }
           else
           {
               return;
           }
                   LimparPasta(p);
                       //System.IO.Directory.CreateDirectory(targetPath);

                   }

                   //LimparPasta(p);
               }
           }

 

Valeus a ajuda =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ivan,

 

Eu ajeitei o problema do fileName, porém acredito que não adiantou em nada,

 

lá no topo onde eu criei a variável fileName eu coloquei assim agora "string fileName = String.Empty;"

 

Agora não tem mais o erro,

 

porém ele não está criando a pasta "backup" e jogando os arquivos dentro dela.

 

Simplesmente porque quando ele vai ler os arquivos da pasta mostra que não tem nenhum,

 

eu acho que sei onde está o erro mas não sei concertar =/

 

public void LimparPasta(DirectoryInfo pasta)
       {
           {
               int cont = 0;
               string targetPath;
               string sourcePath;
               string fileName = String.Empty;
               string extension;

               // Obtém as subspastas da pasta atual
               var subpastas = pasta.GetDirectories();

               //Console.WriteLine("Subpastas: " + subpastas);
               // Percorre a lista de subpastas
               foreach (var p in subpastas)
               {
                   Console.WriteLine("\nPasta: " + p + "\n");
                   // Obtém a lista de arquivos dessa subpasta
                   var arquivos = p.GetFiles();

                   // Percorre a lista de arquivos da subpasta
                   foreach (var a in arquivos)
                   {
                       if (a.Name == "BACKUP.txt")
                       {
                           Console.WriteLine("########## BACKUP na pasta " + p);
                           cont++;
                       }
                       Console.WriteLine("\t* arquivo: " + a);
                       [size="5"][i][b]fileName = a.Name;[/b][/i][/size] // Cada vez que passa o fileName pega um valor diferente, até pensei em fazer um vetor, mas não da pra saber o tamanho exato pra criação.
                   }
                   // CRIAÇÃO DE PASTA AQUI DEPOIS DO FOREACH

                   if (cont == 1)
                   {
                       cont = 0;
                       sourcePath = pasta + @"\" + p.Name;
                       targetPath = pasta + @"\" + p.Name + @"\backup";

                       if (System.IO.Directory.Exists(sourcePath)){
                           string[] files = System.IO.Directory.GetFiles(sourcePath);

                       // Copy the files and overwrite destination files if they already exist.
                       [size="5"][i][b]foreach (string s in files)[/b][/i][/size] // Ai o problema é quando chega aqui parece que não tem nenhum arquivo dentro da pasta ai ele sai do laço. =/
                       {

                       string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
                       string destFile = System.IO.Path.Combine(targetPath,fileName );

                       if (!System.IO.Directory.Exists(targetPath))
                       {
                           System.IO.Directory.CreateDirectory(targetPath);
                       }

                       // Use static Path methods to extract only the file name from the path.
                       fileName = System.IO.Path.GetFileName(s);
                       extension = Path.GetExtension(fileName);
                       if (extension == ".vcproject")
                       {

                           destFile = System.IO.Path.Combine(targetPath, fileName);
                           System.IO.File.Copy(s, destFile, true);


                       }
                       else if (extension == ".tls")
                       {
                           destFile = System.IO.Path.Combine(targetPath, fileName);
                           System.IO.File.Copy(s, destFile, true);


                       }
                       else
                       {
                       }
                   }
               }
               else
               {
                   Console.WriteLine("Source path does not exist!");
               }
           }
           LimparPasta(p);

                   }


               }
           }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro kinhas, eu testei e rodou 100%. ele leu os arquivos da pasta, criou a nova pasta e copiou os arquivo tranqüilamente.

A única coisa que mudei no seu código foi o seguinte: if (a.Name.ToLower() == "backup.txt") assim sempre coloco o nome do arquivo em letra minúsculas para depois comparar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ivan,

 

Por exemplo as pastas que eu estou testando fica nessse Path: "C:\temp\novoapp" (dentro do novoapp tenho duas pastas "teste" e "Vcut",

 

quando coloco para executar assim ele funciona perfeitamente, porém quando coloco somente "C:\temp" ele simplesmente pula o laço como se não tivesse arquivo nenhum,

 

teneti colocar vetor agora, mas ele continua não encontrando arquivo nenhum.

 

EDIT.

 

O problema está nestas linhas de código.

 

if (System.IO.Directory.Exists(sourcePath)){
                           string[] files = System.IO.Directory.GetFiles(sourcePath);

                       foreach (string s in files)

 

Ele simplesmente não entra nesse laço,

 

ou seja, ele não cria a pasta =/

 

e não consigo entender o porque que ele não entra.

 

Outra coisa que está acontecendo e eu não sei porque é que na primeira pasta o sourcePath ta OK, mas quando vai pra segunda pasta vai pra isntrução else que diz "Source path does not exists"

 

cara to ficando desanimado com isso =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou debugando ela des de ontem,

 

ali onde está a variável files aparecer como string{0},

 

como se não tivesse nada dentro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas veja, você esta passando C:\temp, e esta procurando arquivos e não folders. Dentro do C:\temp, tem aquivos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dentro do C:\temp tem arquivos também,

 

mas então,

 

eu estou testando em poucos folders,

 

porque depois eu vou simplesmente colocar o nome do Driver que ele irá procurar e ai vai entrar em diversos folders,

 

e por exemplo o sourcePath que o String[] files está recebendo está mandando exatamente isso "NOVOAPP\\Teste".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas tipo assim. você ler os files de uma pasta e procura o arquivo backup.txt se encontrar cria um backup e tal.

mas após a leitura dos arquivos, pode conter subpastas que tb devem ser lidas certo? Então falta essa implementação, sacou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ué,

 

mas o código já está pra ler as subpastas também,

 

cara sério já mexi tanto nesse código que ta uma farofa,

 

já não sei mais o que funciona e o que não funciona rsrsrs.

 

EDIT.

 

Pelo que eu fiz aqui, ele vai entrando nas pastas até não ter mais pastas,

 

ai depois ele vai verificando os arquivos,

 

não tenho certeza,

 

primeira vez que faço um código desse tipo e tenho impressão de que está tudo errado.

 

EDIT2.

 

Ivan, eu só mudo para C:\temp\novoapp e ele cria a pasta, e se eu deixo C:\temp ele não cria nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Curte só meu teste:

D:\Files

 

dentro dela

D:\Files\teste

D:\Files\teste\backup.txt

 

D:\Files\xx

D:\Files\xx\backup.txt

 

Resultado final

D:\Files\teste

D:\Files\teste\backup.txt

D:\Files\teste\backup

D:\Files\teste\backup\backup.txt

 

 

D:\Files\xx

D:\Files\xx\backup.txt

D:\Files\xx\backup

D:\Files\xx\backup\backup.txt

 

Dai coloquei uma pasta X dentro de teste ele não entra na X que esta em D:\Files\teste\x

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso que precisa funcionar aqui e acrescentar mais outros arquivos do tipo que eu especifiquei no programa.

 

Mas agora meu código ainda ta dando could not find 'x' file, e nem cria a pasta.

 

EDIT.

 

Op, concertei uma coisa aqui,

 

ele está criando a pasta, porém está mandando um arquivo só e na outra não manda nenhum =O,

 

tipo, tenho 4 arquivos:

 

backup.txt

oi.jpg

tchau.jpg

talvez.gif

 

EDIT2. XD

 

Pronto,

 

agora o código está criando a pasta e jgoando os arquivos certos para lá.

 

mas só faz isso se eu coloco c:\temp\novoapp, se eu coloco só o c:\temp não acontece nada,

 

acho que agora está igual o seu,

 

como você disse tem que implementar né,

 

eu sei o que implementar ( eu acho), ma snão tenho nem idéia de como fazê-lo.

no código está para mandar os jpg porém ele só está mandando o oi.jpg =P

 

e na outra pasta está cheio de jpg e ele não está mandando nenhum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.