Windows Forms - Funções de Arquivo Texto
Imports System.IO
Module Arquivos_Texto
'executa as funções de leitura e gravação de arquivos texto
Lê arquivo texto 1
#Region "LeituraArquivoTexto"
''' <summary>
''' Lê um arquivo texto até o fim e devolve num único string com as linhas separadas por vbcrlf
''' exige Imports System.IO
''' </summary>
''' <param name="arquivo"></param>
''' <returns></returns>
Public Function LeArquivoTexto1(arquivo As String) As String
Dim fileReader As StreamReader
Dim LinhaDado As Integer
Dim dados As String
dados = ""
Try
fileReader = File.OpenText(arquivo) ' no win7 e 8 não pode-se utilizar a pasta c:\
LinhaDado = fileReader.ReadLine ' converte texto para numérico sem problemas
While Not IsDBNull(LinhaDado)
dados = dados + LinhaDado + vbCrLf
End While
MsgBox("Leitura do dado feita com sucesso")
fileReader.Close()
Catch ex As Exception
MsgBox("Ocorreu um erro no acesso ao arquivo : " + vbCrLf + Err.Description)
' fileReader.Close() dá erro
End Try
Return dados
End Function
Lê arquivo texto 2
''' <summary>
''' le o arquivo de nome recebido por parametro e retorna uma string com seu conteudo
''' exige Imports System.IO
''' </summary>
''' <param name="NomeArquivo"></param>
''' <returns></returns>
Public Function LeArquivoTexto2(NomeArquivo As String) As String
Dim dado As String
Dim a As String
a = ""
If File.Exists(NomeArquivo) Then
Dim reader As New StreamReader(NomeArquivo)
Do While Not reader.EndOfStream
dado = reader.ReadLine
a = a + dado + vbCrLf
Loop
reader.Close()
Else
Return Nothing
End If
Return a
End Function
Lê arquivo texto 3
''' <summary>
''' Lê todo um arquivo texto para um único string
''' </summary>
''' <param name="arquivo"></param>
''' <returns></returns>
Private Function LeArquivoTexto3(arquivo As String) As String
Dim objStream As New System.IO.FileStream(arquivo, IO.FileMode.OpenOrCreate)
Dim Arq As New System.IO.StreamReader(objStream)
Dim texto As String
texto = Arq.ReadToEnd
Arq.Close()
Return texto
End Function
Lê arquivo texto 4
''' <summary>
''' Le um arquivo texto e salva numa lista de strings
''' exige Imports System.IO
''' </summary>
''' <param name="arquivo"></param>
''' <returns></returns>
Public Function LeArquivoTexto4(arquivo As String) As List(Of String)
Dim fileReader As StreamReader
Dim LinhaDado As Integer
Dim lista As New List(Of String)
lista.Clear()
Try
fileReader = File.OpenText(arquivo) ' no win7 e 8 não pode-se utilizar a pasta c:\
lista.Add(fileReader.ReadLine) ' converte texto para numérico sem problemas
While Not IsDBNull(LinhaDado)
lista.Add(LinhaDado)
End While
MsgBox("Leitura do dado feita com sucesso")
fileReader.Close()
Catch ex As Exception
MsgBox("Ocorreu um erro no acesso ao arquivo : " + vbCrLf + Err.Description)
' fileReader.Close() dá erro
End Try
Return lista
End Function
#End Region
Grava arquivo texto 1
#Region "GravaçãoArquivoTexto"
''' <summary>
''' retorna true se salvou o dado no arquivo informado por parametro
''' exige Imports System.IO
''' </summary>
''' <param name="NomeArquivo"></param>
''' <param name="dado">é um array com os strings a serem gravados</param>
''' testar funcionamento
''' <returns></returns>
Public Function GravaArquivoTexto1(NomeArquivo As String, dado() As String) As Boolean
'Dim linha As String
Try
Dim escrita As New StreamWriter(NomeArquivo)
'For a = 0 To dado.Length - 1
'linha = dado(a)
'escrita.WriteLine(linha)
'Next
escrita.Write(dado)
escrita.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
Grava arquivo texto 2
Public Function GravaArquivoTexto2(NomeArquivo As String, dado As String) As Boolean
'Dim linha As String
Try
Dim escrita As New StreamWriter(NomeArquivo)
escrita.Write(dado)
escrita.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
#End Region
Retorna o número de linhas do Arquivo texto
Public Function Num_Linhas_Arquivo_Texto(ByVal nome_arquivo As String) As Integer
Dim a As Integer
Dim fileReader As StreamReader
Dim Dado As String
Try
fileReader = File.OpenText(nome_arquivo)
a = 0
While fileReader.EndOfStream = False
Dado = fileReader.ReadLine
a = a + 1
End While
fileReader.Close()
Catch ex As Exception
MsgBox("Ocorreu um erro de acesso ao arquivo:" + vbCrLf + Err.Description, vbCritical, "Function Num_Linhas_Arquivo_Texto")
End Try
Return a
End Function
End Module
-----------------------------------------------------------------------------------------
Arquivos
Imports System.IO
Public Module Arquivos
Conta o número de arquivos que estão entre uma faixa de tamanhos
''' <summary>
''' Conta o número de arquivos da pasta que estão entre o tamanho máximo e mínimo
''' Conta os arquivos apenas da pasta recebida por parametro - não inclui arquivos sub-pastas
''' </summary>
'''
Public Function Contar(pasta As String, tamMin As Double, tamMax As Double) As ArrayList
Dim files() As String
Dim i, fileCount As Integer
Dim MaxSize, MinSize As Integer
Dim Arqs As New ArrayList
If pasta = "" Then
MsgBox("Pasta inválida")
Return Nothing
Exit Function
End If
'se o valor vier de um textbox
'If Form1.TextBox2.Text <> "" Then
'tamMin = Val(Form1.TextBox2.Text)
'Else
'tamMin = 0
'End If
'se o valor vier de um textbox
'If Form1.TextBox3.Text <> "" Then
'tamMax = Val(Form1.TextBox3.Text)
'Else
'MsgBox("Tamanho máximo inválido")
'Exit Sub
'End If
'Form1.ListBox1.Items.Clear()
files = System.IO.Directory.GetFiles(pasta)
For i = 0 To files.GetUpperBound(0)
Dim FI As New System.IO.FileInfo(files(i))
If FI.Length >= MinSize And FI.Length <= MaxSize Then
fileCount = fileCount + 1
Arqs.Add(Convert.ToString(fileCount) + " - " + FI.Name + " - " + Convert.ToString(FI.Length))
End If
Next
'arqs.add("Foram encontrados " + Convert.ToString(fileCount) + " arquivos entre o tamanho " + Convert.ToString(MinSize) + " e " + Convert.ToString(MaxSize) + " bytes")
Return Arqs
End Function
Retorna true se o arquivo existe
''' <summary>
''' retorna true se o arquivo existe
''' </summary>
''' <param name="nomeArquivo"></param>
''' <returns></returns>
Public Function ArquivoExiste(nomeArquivo As String) As Boolean
If File.Exists(nomeArquivo) Then
Return True
Else
Return False
End If
End Function
Retorna true se os arquivos são iguais
''' <summary>
''' retorna true se os arquivos são iguais
''' </summary>
''' <param name="Arq1"></param>
''' <param name="Arq2"></param>
''' <returns></returns>
Public Function ComparaArquivos(Arq1 As String, Arq2 As String) As Boolean
Dim file1byte As Integer
Dim file2byte As Integer
Dim fs1 As FileStream
Dim fs2 As FileStream
' verificando se foi dado o mesmo arquivo como parametro
If Arq1 = Arq2 Then ' verificando Then se os dois nomes apontam para o mesmo arquivo
Return False 'não eliminar se é o mesmo arquivo
End If
'verificando se ambos os arquivos existem
If (Not System.IO.File.Exists(Arq1)) Or (Not System.IO.File.Exists(Arq2)) Then
Return False 'um dos arquivos não foi encontrado
End If
Dim f1 As FileInfo = New FileInfo(Arq1)
Dim f2 As FileInfo = New FileInfo(Arq2)
If f1.Length <> f2.Length Then
Return False 'arquivos com tamanho diferente
End If
' abrindo os dois arquivos.
fs1 = New FileStream(Arq1, FileMode.Open)
fs2 = New FileStream(Arq2, FileMode.Open)
' verificando novamente o tamanho dos arquivos
If fs1.Length <> fs2.Length Then
' fechando os arquivos
fs1.Close()
fs2.Close()
' Retornando falso para indicar que são de tamanhos diferentes
Return False
End If
' Lendo e comparando os arquivo byte a byte
Do
' Lendo um byte de cada arquivo
file1byte = fs1.ReadByte()
file2byte = fs2.ReadByte()
Loop While (file1byte = file2byte) And (file1byte <> -1)
' fechando os arquivos
fs1.Close()
fs2.Close()
' retornando o resultado da comparação
Application.DoEvents()
Return ((file1byte - file2byte) = 0)
End Function
Retirando atributos de arquivos
Se você deseja, por exemplo, eliminar um arquivo com o atributo read-only precisa primeiro
retirar o atributo para depois eliminar.
''' Retira o atributo selecionado do arquivo selecionado
Public Function RemoveAtributo(ByVal arquivo As String, ByVal atributosARemover As FileAttributes) As Boolean
'Return atributo And (Not atributosARemover)
Dim atributos As FileAttributes
Try
atributos = File.GetAttributes(arquivo)
atributos = atributos And (Not atributosARemover)
File.SetAttributes(arquivo, atributos)
Return True
Catch ex As Exception
Return False
End Try
End Function
Eliminar arquivo
''' <summary>
''' Elimina um arquivo
''' Devolve true se o arquivo foi eliminado ou false se não for.
''' </summary>
''' <param name="arquivo"></param>
''' <returns></returns>
Public Function EliminarArquivo(ByVal arquivo As String) As Boolean
Dim atributos As FileAttributes
EliminarArquivo = False
'retirando os atributos especiais do arquivo
' atributos = File.GetAttributes(arquivo)
'atributos = RemoveAtributo(atributos, FileAttributes.ReadOnly)
atributos = RemoveAtributo(arquivo, System.IO.FileAttributes.ReadOnly)
'attributes = RemoveAttribute(attributes, FileAttributes.Hidden)
Try
File.Delete(arquivo)
Return True
Catch ex As Exception
Return False
End Try
End Function
Escolhendo a pasta do arquivo a ser trabalhada 1
''' <summary>
''' Escolhe a pasta do disco a ser processada
''' Não gosto do FolderBrowserDialog porque ele não é amigável
''' </summary>
''' <returns></returns>
Public Function EscolherPasta() '_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEscolherPasta.Click
Dim fbd As New FolderBrowserDialog
fbd.Description = "Selecione a pasta onde o arquivo se encontra"
fbd.RootFolder = Environment.SpecialFolder.MyComputer
fbd.ShowNewFolderButton = True
If fbd.ShowDialog = DialogResult.OK Then
Return fbd.SelectedPath
End If
Return Nothing
End Function
Escolhendo a pasta do arquivo a ser trabalhada 2
''' <summary>
''' Escolhe o arquivo de uma pasta ou da pasta corrente
''' </summary>
''' <param name="pasta"></param>
''' <returns></returns>
Public Function EscolherArquivo(pasta As String) As String '_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEscolherArquivo.Click
Dim ofd As New OpenFileDialog
ofd.Multiselect = True
ofd.Title = "Escolha o arquivo a ser trabalhado"
If pasta <> "" Then
ofd.InitialDirectory = pasta
Else
ofd.InitialDirectory = "C:\"
End If
'filtra para exibir somente arquivos de imagens
ofd.Filter = "Texts (*.txt;*.csv)|*.txt;*.csv|" & "All files (*.*)|*.*"
ofd.CheckFileExists = True
ofd.CheckPathExists = True
ofd.FilterIndex = 2
ofd.RestoreDirectory = True
ofd.ReadOnlyChecked = True
ofd.ShowReadOnly = True
Dim dr As DialogResult = ofd.ShowDialog()
If dr = System.Windows.Forms.DialogResult.OK Then
Return ofd.FileName
Else
Return Nothing
End If
End Function
Obter a lista de todos os arquivos de uma pasta
Public Function Pegar_Arquivos(Pasta As String) As List(Of String)
Dim pastaOrigem As String
Dim a As New List(Of String)
'Dim DirDiretorio As DirectoryInfo = New DirectoryInfo(frmPrincipal.txtPastaOrigem.Text)
Dim arqs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
'Dim i As Integer
pastaOrigem = Pasta
If Right(pastaOrigem, 1) <> "\" Then
pastaOrigem = pastaOrigem + "\"
End If
pastaOrigem = pastaOrigem.Replace("\", "\\")
Try
'arqs = My.Computer.FileSystem.GetFiles("C:\Users\bonito_laptop_i7\Documents\Visual Studio 2010\Projects", FileIO.SearchOption.SearchAllSubDirectories, "*.txt")
'arqs = My.Computer.FileSystem.GetFiles("C:\Users\AntonioCarlos\.VirtualBox", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
'### Preenche o FileCollection com um Array de objetos FileInfo
arqs = My.Computer.FileSystem.GetFiles(pastaOrigem, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
'### Podemos utilizar os objetos da coleção oFileCollection para preencher um ListBox por exemplo
'msg1("Adicionando arquivos encontrados....")
a.clear
For Each arq In arqs
a.Add(arq)
Next
'frmArquivosPastaOrigem.ListBox1.Refresh()
Application.DoEvents()
Return a
Catch ex As Exception
'FrmRelatorio.ListBox1.Items.Add("Falha na obtenção dos nomes dos arquivos na pasta origem")
'FrmRelatorio.ListBox1.Items.Add(" " + ex.Message)
'Pegar_Arquivos_Pasta_Origem = False
Return Nothing
End Try
End Function
Verificando se o arquivo existe numa determinada pasta
Public Function ArquivoExistePasta(Arquivo As String) As Boolean
'verifica se o arquivo existe na pasta de destino - True se existe
'nota : Vem o path completo e eu troco o path de origem pelo de destino
'arquivo2 = Arquivo.Replace(frmPrincipal.txtPastaOrigem.Text, frmPrincipal.txtPastaDestino.Text)
If Not System.IO.File.Exists(Arquivo) Then
Return False
Else
Return True
End If
Return Nothing
End Function
Gerando um novo nome para o arquivo
É o caso de quando vamos copiar um arquivo de uma pasta de origem para uma pasta de destino e ele
já existe na pasta de destino. Esta função gera um nome novo para o arquivo de maneira que ele
possa ser copiado ou movido sem problemas.
''' <summary>
''' Este arquivo gera um nome novo para o arquivo que vai ser copiado/movido
''' para não apagar o que já existe
''' </summary>
''' <param name="NomeArquivo"></param>
''' <returns></returns>
Public Function RetornaSufixoAnexarArquivo(NomeArquivo As String) As String
'separando as partes do nome do arquivo antigo para compor o nome do arquivo novo
Dim posPto As Integer
Dim Horario As String
Dim Extensao As String
Dim NomeAntigo As String
Dim NomeNovo As String
posPto = InStr(NomeArquivo, ".")
NomeArquivo = Left(NomeArquivo, posPto - 1)
NomeArquivo = Mid(NomeArquivo, InStrRev(NomeArquivo, "\") + 1)
Extensao = Mid(NomeArquivo, posPto + 1, 2000)
Horario = CStr(Now.Day) + "_" + CStr(Now.Month) + "_" + CStr(Now.Year) + "_" + CStr(Now.Hour) + "_" + CStr(Now.Minute) + "_" + CStr(Now.Second) + "_" + CStr(Now.Millisecond)
NomeAntigo = NomeArquivo
NomeNovo = NomeArquivo + "_" + Horario + "." + Extensao
Return NomeNovo
End Function
Renomeando o arquivo
Public Function RenomeiaArquivo(NomeArquivoVelho As String, NomeArquivoNovo As String) As Boolean
'renomeia arquivo na pasta de destino
Try
'ArqNovo = Arquivo.Replace(frmPrincipal.txtPastaOrigem.Text, frmPrincipal.txtPastaDestino.Text)
My.Computer.FileSystem.RenameFile(NomeArquivoVelho, NomeArquivoNovo)
Return True
Catch ex As Exception
'FrmRelatorio.ListBox1.Items.Add("Falha ao renomear arquivo : " + frmPrincipal.txtPastaDestino.Text + Arquivo)
'FrmRelatorio.ListBox1.Items.Add(" " + ex.Message)
Return False
End Try
End Function
Copiando o arquivo
Public Function CopiarArquivo(ByVal ArquivoOrigem As String, ByVal ArquivoDestino As String) As Boolean
Try
My.Computer.FileSystem.CopyFile(ArquivoOrigem, ArquivoDestino)
Return True
Catch ex As Exception
'FrmRelatorio.ListBox1.Items.Add("Falha na cópia do arquivo : " + frmPrincipal.txtPastaOrigem.Text + Arquivo)
Return False
End Try
End Function
Criando uma nova pasta
Public Function CriarNovaPasta(Pasta As String)
Dim a As String
If Pasta = "" Then
MsgBox("Escolha o disco primeiramente")
Return False
End If
a = Pasta
If Right(a, 1) <> "\" Then
a = a + "\" + a
Else
a = a + a
End If
My.Computer.FileSystem.CreateDirectory(a)
Return True
End Function
Retornando apenas a pasta do nome completo do arquivo
''' <summary>
''' Recebe o nome do arquivo inteiro (pasta + arquivo) e retorna só a pasta
''' com o \ no final do nome da pasta
''' </summary>
''' <param name="Arquivo"></param>
''' <returns></returns>
Public Function PegaPasta(Arquivo As String) As String
Dim a As String
a = Arquivo
If InStr(a, "\") = -1 Then
Return Nothing
End If
a = Left(a, InStrRev(a, "\"))
Return a
End Function
Retornando apenas o nome do arquivo do nome completo do arquivo - Remove a pasta
''' <summary>
''' Recebe o nome doo arquivo completo ( Pasta + Nome Arquivo) e retorna só o nome do arquivo
''' </summary>
''' <param name="NomeArquivo"></param>
''' <returns></returns>
Public Function PegaNomeArquivo(NomeArquivo As String) As String
Dim a As String
a = NomeArquivo
If InStr(a, "\") = -1 Then
Return Nothing
End If
a = Mid(a, InStrRev(a, "\") + 1, 2000)
Return a
End Function
End Module