Kinhas 0 Denunciar post Postado Abril 7, 2011 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
Ivan.Teles 23 Denunciar post Postado Abril 7, 2011 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
Kinhas 0 Denunciar post Postado Abril 7, 2011 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
Ivan.Teles 23 Denunciar post Postado Abril 7, 2011 Tentou usar o método Path.Combine? http://msdn.microsoft.com/en-us/library/system.io.path.combine.aspx Compartilhar este post Link para o post Compartilhar em outros sites
Kinhas 0 Denunciar post Postado Abril 7, 2011 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.Teles 23 Denunciar post Postado Abril 7, 2011 Mais tarde testarei seu código. e posto um resultado! Compartilhar este post Link para o post Compartilhar em outros sites
Kinhas 0 Denunciar post Postado Abril 8, 2011 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
Ivan.Teles 23 Denunciar post Postado Abril 8, 2011 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
Kinhas 0 Denunciar post Postado Abril 8, 2011 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
Ivan.Teles 23 Denunciar post Postado Abril 8, 2011 Debug a aplicação, rapidinho você encontrará o erro! Compartilhar este post Link para o post Compartilhar em outros sites
Kinhas 0 Denunciar post Postado Abril 8, 2011 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
Ivan.Teles 23 Denunciar post Postado Abril 8, 2011 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
Kinhas 0 Denunciar post Postado Abril 8, 2011 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
Ivan.Teles 23 Denunciar post Postado Abril 8, 2011 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
Kinhas 0 Denunciar post Postado Abril 8, 2011 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
Ivan.Teles 23 Denunciar post Postado Abril 8, 2011 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
Kinhas 0 Denunciar post Postado Abril 8, 2011 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