1
I have two functions, one returns only the first result and the other also returns the first result or returns more than one result.
I created the "string all" parameter to define whether to return one or more results in the second function. But the second function became more complex and I could have made it simpler to work just to return several results
I must continue programming complex equal to the second function or make it simpler and with only one goal?
Test call:
Pastas pastas1 = new Pastas(@"C:\New folder\Nova pasta\");
Pastas.Teste1(pastas1, "3.txt");
Code:
// Mapeia todo as pastas e subpastas de um diretório
class Pastas
{
public DirectoryInfo Diretorio;
public List<Pastas> SubDiretorios = new List<Pastas>();
public FileInfo[] Arquivos;
public Pastas(string pasta)
{
Diretorio = new DirectoryInfo(pasta);
foreach (DirectoryInfo di in Diretorio.GetDirectories())
{
SubDiretorios.Add(new Pastas(di.FullName));
}
Arquivos = Diretorio.GetFiles();
}
// Primeira Função
// Percorre as pastas e retorna o primeiro arquivo pelo nome
public FileInfo GetArquivo(string nome)
{
FileInfo arquivo = Arquivos.FirstOrDefault(x => x.Name == nome);
if (arquivo is null)
{
foreach (Pastas item in SubDiretorios)
{
arquivo = item.GetArquivo(nome);
if (arquivo != null)
break;
}
}
return arquivo;
}
// Segunda função
public List<FileInfo> GetArquivo(string nome, bool todos)
{
List<FileInfo> arquivos = new List<FileInfo>();
if (todos)
arquivos = Arquivos.Where(x => x.Name == nome).ToList();
else
{
FileInfo arquivo = Arquivos.FirstOrDefault(x => x.Name == nome);
if (arquivo != null)
arquivos.Add(arquivo);
}
if (todos || arquivos.Count == 0)
{
foreach (Pastas item in SubDiretorios)
{
arquivos.AddRange(item.GetArquivo(nome, todos));
bool apenasOPrimeiro = !todos;
if (apenasOPrimeiro && arquivos.Count == 1)
break;
}
}
return arquivos;
}
public static void Teste1(Pastas pastas, string nomearquivo)
{
FileInfo arquivo = pastas.GetArquivo(nomearquivo);
if (arquivo != null)
Debug.Print(arquivo.FullName);
else
Debug.Print("arquivo nulo");
}
public static void Teste2(Pastas pastas, string nomearquivo)
{
List<FileInfo> arquivos = pastas.GetArquivo(nomearquivo, true);
if (arquivos.Count > 0)
arquivos.ForEach(x => Debug.Print(x.FullName));
else
Debug.Print("arquivo nulo");
}
// GetArquivo(..., false)
public static void Teste3(Pastas pastas, string nomearquivo)
{
List<FileInfo> arquivos = pastas.GetArquivo(nomearquivo, false);
if (arquivos.Count > 0)
arquivos.ForEach(x => Debug.Print(x.FullName));
else
Debug.Print("arquivo nulo");
}
}
I did a new answer with better code, I’m new on the site, am I doing it right? The code is good?
– Brian de Oliveira
Improved but still doesn’t seem ideal, anyway I can not speak with property because I would need to understand all the requirements.
– Maniero
This is just a class to store folder paths and file data, then I return a list of files and compare the data with another list of files
– Brian de Oliveira