Neste artigo vou mostrar como podemos renomear pastas usando a linguagem VB .NET. |
Você já precisou alterar o nome de diversas pastas que iniciam com um determinado caractere ?
Vamos supor que você salvou diversos arquivos em pastas e essas pastas foram geradas iniciando com o caractere _ . Exemplo: _pasta1, _pasta2, pasta2, etc...
Quando você tem dezenas ou centenas de pastas nessa situação renomear o nome das pastas manualmente pode ser tedioso.
Vou mostrar como podemos criar uma pequena aplicação usando VB .NET que faz esse trabalho.
Essa aplicação vai fazer o seguinte:
Permitir que o usuário selecione uma pasta onde estão os arquivos a serem renomeados
Informar o caractere no arquivo que deseja substituir
Informar o caractere que vai ser usado para substituir
Como o projeto foi desenvolvido para atender uma demanda ele foi feito a toque de caixa e vai precisar ser otimizado.
A otimização eu vou deixar a cargo de cada de um de vocês...
Então ao trabalho...
Recursos usados:
Visual Studio Community 2017 update 15.5
Criando o projeto no Visual Studio 2017 Community
Abra o Visual Studio Community 2017 e clique em New Project;
Selecione Visual Basic, o template Windows Classic Desktop e a seguir Windows Forms App(.NET Framework);
Informe o nome Vbn_Renomar e clique no botão OK;
A seguir inclua no formulário padrão Form1.vb os seguintes controles:
Disponha os controles conforme o leiaute da figura abaixo:
Definindo o código do formulário
1- Evento Load do formulário
No evento Load do formulário vamos definir o código abaixo que define os valores dos caracteres que serão usados na alteração de nome das pastas:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = My.Application.Info.AssemblyName.ToString & " - Macoratti .net"
txtPasta.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures).ToString
txtCaractereLocalizar.Text = "_"
txtCaractereSubstituir.Text = "-"
End Sub
|
Esse será o modelo de domínio da nossa aplicação.
2- Evento Click do botão Selecionar Pasta
Vamos incluir no evento Click do botão Selecionar Pasta o código que permite o usuário escolhar uma pasta:
Private Sub btnSelecionarPasta_Click(sender As Object, e As EventArgs) Handles btnSelecionarPasta.Click
Using oFolderBrowserDialog As New FolderBrowserDialog
If oFolderBrowserDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
If oFolderBrowserDialog.SelectedPath.Length > 0 Then
txtPasta.Text = oFolderBrowserDialog.SelectedPath
End If
End If
End Using
End Sub
|
3- Evento Click do botão Iniciar
No evento Click do botão Iniciar temos o código que vai invocar o método EncontrarRenomearArquivos() :
Private Sub btnIniciar_Click(sender As Object, e As EventArgs) Handles btnIniciar.Click
Dim caractere_Valido As Boolean = False
If Not txtCaractereSubstituir.Text.Contains("\") Then
caractere_Valido = True
End If
If caractere_Valido = True Then
If EncontrarRenomearArquivos(txtPasta.Text, "*" & txtCaractereLocalizar.Text & "*") Then
MessageBox.Show("Operação concluída com sucesso...")
Process.Start("explorer.exe", txtPasta.Text)
Else
MessageBox.Show("Não foi possível realizar a operação ...")
End If
End If
End Sub
|
3- Código do método EncontrarRenomearArquivos
Abaixo temos o código do método EncontrarRenomearArquivos:
Private Function EncontrarRenomearArquivos(Optional caminhoDiretorio As String = "c:\dados\teste\",
Optional StringAProcurar As String = "*.txt") As Boolean
Dim caminhoValido As Boolean = True
'----------------------------------------------
' VERIFICA SE CAMINHO É VÁLIDO
'----------------------------------------------
'remove espaco antes e depois
caminhoDiretorio = Trim(caminhoDiretorio)
'verifica se o tamanho é zero
If Not Len(caminhoDiretorio) > 0 Then
caminhoValido = False
End If
'verifica se o caractere é válido
' \ * | : ? < > / exceto o \ que o separador de pasta
' e * que indica para ignorar tudo dentro de outros chars
If InStr(caminhoDiretorio, "|", CompareMethod.Binary) > 0 Then
caminhoValido = False
End If
If InStr(caminhoDiretorio, ">", CompareMethod.Binary) > 0 Then
caminhoValido = False
End If
If InStr(caminhoDiretorio, "<", CompareMethod.Binary) > 0 Then
caminhoValido = False
End If
If InStr(caminhoDiretorio, "?", CompareMethod.Binary) > 0 Then
caminhoValido = False
End If
If InStr(caminhoDiretorio, ":", CompareMethod.Binary) = 2 Then
Dim str_temp As String = caminhoDiretorio.Substring(2, Len(caminhoDiretorio) - 2)
If InStr(str_temp, ":", CompareMethod.Binary) > 0 Then
caminhoValido = False
End If
End If
If InStr(caminhoDiretorio, "*", CompareMethod.Binary) > 0 Then
caminhoValido = False
End If
Dim SegurancaValida As Boolean = True
'------------------------------------------Código comentado---------------------------------
' este código inclui mais segurança ao processo permitindo que somente usuários pertencente
' ao grupo dos administradores possam realizar essa operação
'---------------------------------------------------------------------------------------------------------
'Dim oDirectorySecurity As System.Security.AccessControl.DirectorySecurity
'Dim oAuthorizationRuleCollection As System.Security.AccessControl.AuthorizationRuleCollection
'Dim oRule As System.Security.AccessControl.FileSystemAccessRule
'oDirectorySecurity = IO.Directory.GetAccessControl(caminhoDiretorio)
'oAuthorizationRuleCollection = oDirectorySecurity.GetAccessRules(
' True, True, Type.GetType("System.Security.Principal.NTAccount"))
'For Each oRule In oAuthorizationRuleCollection
' If oRule.FileSystemRights = Security.AccessControl.FileSystemRights.FullControl Then
' If InStr(oRule.IdentityReference.Value, My.User.Name) > 0 Then
' SegurancaValida = True
' End If
' End If
'Next
Dim Is_Pasta_Atalho As Boolean = False
If caminhoDiretorio.StartsWith("c:\Users", True, System.Globalization.CultureInfo.CurrentCulture) Then
Is_Pasta_Atalho = True
End If
If caminhoValido = True And SegurancaValida = True Then
For Each diretorioEncontrado As String In My.Computer.FileSystem.GetDirectories(caminhoDiretorio,
FileIO.SearchOption.SearchTopLevelOnly, StringAProcurar)
Dim aArray() As String = diretorioEncontrado.Split("\")
Dim Pasta1 As String = aArray(aArray.Length - 1)
Dim Pasta2 As String = Pasta1.Replace(txtCaractereLocalizar.Text, txtCaractereSubstituir.Text)
Try
My.Computer.FileSystem.RenameDirectory(diretorioEncontrado, Pasta2)
Catch ex1 As System.IO.PathTooLongException
MessageBox.Show("Erro " & ex1.Message)
Catch ex As Exception
MessageBox.Show("Erro " & ex.Message)
End Try
Next
If chkIncluiSubPasta.Checked = True Then
For Each diretorioEncontrado As String In My.Computer.FileSystem.GetDirectories(
caminhoDiretorio, FileIO.SearchOption.SearchTopLevelOnly)
EncontrarRenomearArquivos(diretorioEncontrado, StringAProcurar) ' busca recursiva
Next
End If
Return True
Else
MessageBox.Show("caminhoValido =" & caminhoValido & vbCrLf & "SegurancaValida =" & SegurancaValida)
Return False
End If
End Function
|
Executando um projeto e usando a pasta c:\dados\teste para verificar a aplicação temos abaixo o resultado obtido onde renomeamos as pastas que iniciavam com o caractere _ trocando-o pelo caractere -.
O código do projeto precisa ser otimizado.
Que tal praticar as boas práticas e ajeitar o código ???
Pegue o projeto completo aqui : Vbn_Renomear.zip
(Disse Jesus)"Mas a
hora vem, e agora é, em que os verdadeiros adoradores adorarão o Pai em espírito
e em verdade; porque o Pai procura a tais que assim o adorem."
João 4:23
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 VS 2013 ? |
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
Visual Basic - Operações com arquivos e diretórios - Macoratti.net
VB.NET - Criar, Ler, Escrever, Copiar e Deletar arquivos Textos ...
VB.NET - Lendo e escrevendo em arquivo Textos - Macoratti.net