A utilização e manipulação de ficheiros de texto (*. txt ou outra extensão) é muito comum embora existam bastantes alternativas disponíveis para guardar informação. No entanto, muitas vezes não é uma questão de alternativa (usar ou não usar) mas sim uma necessidade.
O .NET Framework 2.0 introduziu novos métodos que possibilitam um fácil e rápido acesso. Os métodos mais utilizados e mais eficazes para ler e escrever em ficheiros de texto são os namespaces IO (através da classe File, principalmente ReadAllLines, WriteAllText e AppendAllText e o StreamReader, StreamWriter) e o My (através da classe My.Computer.FileSystem, principalmente ReadAllText e WriteAllText).
Obviamente que existem diferenças entre eles, mas as principais diferenças são que o StreamReader e StreamWriter lê/escreve linha a linha e os outros métodos lêem/escrevem tudo de uma só vez, ou seja, utilizam mais recursos da aplicação. Por exemplo o StreamReader lê linha a linha enquanto o método ReadAllLines lê toda a informação para uma variável (array).
É claro que isto apenas se consegue notar em grande número de informação, mas para verem as principais diferenças e desempenhos vejam a seguinte tabela com os tempos de acesso em milisegundos.
Tempo Médio de Leitura
Método/Nº Linhas | 10.000 | 100.000 | 1.000.000 |
IO.File.ReadAllLines | 4,0 | 71,2 | 957,1 |
IO.StreamReader | 2,6 | 33,9 | 313,1 |
My.Computer.FileSystem.ReadAllText | 6,7 | 60,5 | 991,2 |
Tempo Médio de Leitura
Método/Nº Linhas | 10.000 | 100.000 | 1.000.000 |
IO.File.WriteAllText | 15,1 | 123,8 | 1.426,4 |
IO.StreamWriter | 13,8 | 115,5 | 1.922,8 |
My.Computer.FileSystem.WriteAllText | 15,3 | 116,8 | 1.389,1 |
Nota: Tempo em milisegundos com a média de 10 leitura e texto por linha de 13 caracteres
Exemplo de leitura de um ficheiro através do classe IO.File (ReadAllLines)
Dim total As Integer = 0
Dim fileName As String = "c:\teste.txt"' Guarda num Array linha a linha
Dim lines() As String = IO.File.ReadAllLines(fileName)' Ciclo que irá mostrar linha a linha
For Each line As String In linesDebug.WriteLine(line.ToString)
total += 1Next
' Mostra o total de linha lidas
Debug.WriteLine("Total de linhas:" & total.ToString)
Exemplo de escrita de um ficheiro através do classe IO.File (WriteAllText)
Dim total As Integer = 0
Dim fileName As String = "c:\teste.txt"' Cria um novo StringBuilder
Dim sb As New System.Text.StringBuilder' Ciclo que irá inserir construir o ficheiro a gravar
For x As Integer = 0 To 9999' Cria uma linha com o formato "Linha nº 0001"
sb.AppendLine("Linha nº " & x.ToString.PadLeft(4, "0"))
total += 1
Next' Grava o ficheiro no disco
IO.File.WriteAllText(fileName, sb.ToString)' Mostra o resultado
Debug.WriteLine(String.Format("Ficheiro {0} com {1} registos", fileName, total))
Exemplo de leitura de um ficheiro através do classe IO (StreamReader)
Dim total As Integer = 0
Dim fileName As String = "c:\teste.txt"' Ciclo que irá mostrar linha a linha
Using reader As New IO.StreamReader(fileName)' Ciclo até ao fim do ficheiro
While Not reader.EndOfStream()' Mostra o resultado linha a linha
Dim input As String = reader.ReadLine()
Debug.WriteLine(input)
total += 1End While
End Using
' Mostra o total de linha lidas
Debug.WriteLine("Total de linhas:" & total.ToString)
Exemplo de escrita de um ficheiro através do classe IO (StreamWriter)
Dim total As Integer = 0
Dim fileName As String = "c:\teste.txt"' Cria um nova instância de um StreamWriter
Using writer As New IO.StreamWriter(fileName)' Inicia o ciclo que irá gravar no ficheiro
For x As Integer = 0 To 9999writer.WriteLine("Linha nº " & x.ToString.PadLeft(4, "0"))
total += 1
NextEnd Using
' Mostra o resultado
Debug.WriteLine(String.Format("Ficheiro {0} com {1} registos", fileName, total))
Estes são pequenos exemplos da estrutura tipo, embora existam ainda em cada classe, uma serie de métodos que podem ser utilizados. Pelos exemplos mostrados e pelo desempenho de cada um, deverá ser utilizado aquele que mais se ajustar a cada situação. Apenas em ficheiros grandes deverá haver um mais cuidado na escolha do método a utilizar.
Todos utilizam por defeito uma codificação de UTF-8 mas por vezes é necessário ajustar para certos ficheiros. A opção System.Text.Encoding.Default é muitas vezes a melhor solução para problemas de codificação.
PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!
4 comentários:
Tens aqui muito bom material ! Tem sido uma belíssima ajuda ^^ parabéns !
Muito bem
Boa noite,
Estou a fazer um trabalho importante sobre o visual basic 6 e apenas me falta incluir a manipulação de ficheiros em vb6, mas nao percebo em que e que consiste e desconheço a sua sintaxe. Podia ajudar-me?
Obrigada
Olá Claudia!
Este sintaxe é para VB.NET e não para VB6. Coloque a sua dúvida em aqui
Enviar um comentário