VB .NET - Calculando o tamanho de pastas/diretórios
Neste artigo vamos recordar como usar os recursos do LINQ para obter o tamanho de uma pasta/diretório selecionado. |
Hoje
vamos recordar um pouco de LINQ usando recursos que foram lançados na .NET 4.0
como os métodos para Enumerar diretórios e arquivos. Todos esses métodos
retornam coleções enumeráveis (IEnumerable<T>) que
oferecem um melhor desempenho que os Arrays.
Então vamos usar DirectoryInfo.EnumerateDirectories e
DirectoryInfo.EnumerateFiles no exemplo deste artigo para retornar uma
coleção de informações de arquivos e pastas e calculando seus tamanhos usando
LINQ.
Recursos Usados:
Criando o projeto Windows Forms no VS Community 2017
Abra o VS 2017 Community e crie um projeto usando a opção : Visual Basic -> Windows Classic Desktop e selecione o template Windows Forms App (.NET Framework);
Informe o nome Vbn_ArqPastas e clique em OK.
No formulário Form1.vb inclua a partir da ToolBox os controles :
1 Label
1 TextBox - txtLocal
1 Button - btnProcurar
1 TextBox - txtResultado
1 Button - btnObterInfo
Disponha os controles conforme o leiaute da figura abaixo:
Defina o seguinte namespace no formulário:
Imports System.IO
A seguir no evento Click do botão btnProcurar inclua o código para selecionar a pasta para obter informações:
Private Sub btnProcurar_Click(sender As Object, e As EventArgs) Handles btnProcurar.Click
' cria um objeto FolderBrowserDialog
Dim FolderBrowserDialog1 As New FolderBrowserDialog
' cria uma janela de dialogo
With FolderBrowserDialog1
' Desktop é a pasta raiz no dialogo
.RootFolder = Environment.SpecialFolder.Desktop
' seleciona a pata c:\ na entrada
.SelectedPath = "c:\"
' exibe uma mensagem ao usuário
.Description = "Selecione uma pasta"
If .ShowDialog = DialogResult.OK Then
' atribui a seleção da pasta ao textbox
txtLocal.Text = .SelectedPath
End If
End With
End Sub
|
Agora no evento Click do botão de comando
Private Sub btnObterInfo_Click(sender As Object, e As EventArgs) Handles btnObterInfo.Click
Dim dInfo As New DirectoryInfo(txtLocal.Text)
' define o parâmetro booleano para false
' se voce nao quiser incluir sub-pastas
Dim tamanhoDaPasta As Long = TamanhoArquivosDiretorios(dInfo, True)
'calcula tamanho médio dos arquivos da pasta
Dim arquivosDaPasta As String() = Directory.GetFiles(txtLocal.Text)
Dim media = arquivosDaPasta.Select(Function(arquivo) New FileInfo(arquivo).Length).Average()
media = Math.Round(media / 1000000, 1)
txtResultado.Text = ""
txtResultado.Text += String.Format("Tamanho do Diretório em bytes : {0:N0} bytes", tamanhoDaPasta) & vbCrLf
txtResultado.Text += String.Format("Tamanho do Diretório em KB : {0:N2} KB ", CDbl(tamanhoDaPasta) / 1024) & vbCrLf
txtResultado.Text += String.Format("Tamanho do Diretório em MB : {0:N2} MB ", CDbl(tamanhoDaPasta) / (1024 * 1024)) & vbCrLf
txtResultado.Text += vbCrLf
txtResultado.Text += String.Format("Tamanho médio dos arquivos em MB : {0:N2} MB", media) & vbCrLf
End Sub
|
Aqui estamos chamando o método TamanhoArquivosDiretorios() para obter o tamanho total do diretório selecionado.
A seguir vemos o código deste método:
Private Function TamanhoArquivosDiretorios(ByVal dInfo As DirectoryInfo, ByVal incluirSubDir As Boolean) As Long
' Enumera todos os arquivos
Dim tamanhoTotal As Long = dInfo.EnumerateFiles().Sum(Function(file) file.Length)
' Se for incluir subdiretorios
If incluirSubDir Then
' Enumera todos os sub-diretórios
tamanhoTotal += dInfo.EnumerateDirectories().Sum(Function(dir) TamanhoArquivosDiretorios(dir, True))
End If
'retorna o tamanho total
Return tamanhoTotal
End Function
|
Observe que estamos fazendo uma chamada recursiva ao método TamanhoArquivosDiretorios()
Executando o projeto e selecionando uma pasta iremos obter o seguinte resultado:
Para diretórios com muitas sub-pastas e arquivos o processamento poderá se tornar muito lento. Que tal otimizar o código !!!!
Pegue o projeto completo aqui : Vbn_ArqPastas.zip
E a vida eterna é esta: que te conheçam,
a ti só, por único Deus verdadeiro, e a Jesus Cristo, a quem enviaste.
João
17:3
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no Visual Studio ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET ?
|
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
VB .NET - Copiando arquivos entre diretórios - Macoratti.net
VB .NET - Identificando pastas especiais no .NET 4.0 - Macoratti.net
VB .NET - Pesquisando Drivers, Diretórios e Arquivos - Macoratti.net