Tag Archives: File

C# – Lendo um arquivo texto linha a linha

Tinha até esquecido como era programar em .NET. Ando meio longe da linguagem por conta de alguns projetos em outra tecnologia. Mas uma necessidade recente me levou a precisar construir um pequeno aplicativo que resolvesse um problema, algo bem focado.

Bom, das necessidades mais básicas, veio a de ler um arquivo texto linha a linha, coisa que não fazia desde o primeiros labs que fazia em .NET, lá atrás, quando ainda estava aprendendo. Bom, vai o código que construí para servir de exemplo para quem precisar:

using System;
using System.IO; 
 
namespace TextFileLineByLine
{
    class Program
    {
        static void Main( string[] args )
        {
            string filePath = @"c:\temp\test.txt";
            string line; 
 
            if (File.Exists(filePath))
            {
				using (StreamReader reader = new StreamReader(filePath))
                {
                    while ((line = reader.ReadLine()) != null)
                    {
                        Console.WriteLine(line);
                    }
                }
            } 
            Console.ReadLine();
        }
    }
}

O código se baseou no exemplo do colega timm, mas dei uma simplificada, deixando o código bem mais enxuto.

Bom proveito!

.NET : Obter o tamanho de um diretório com o .NET

Dica publicada pelo pessoal da BufaloInfo.

Não há ainda, nas classes do framework, um meio de obter o tamanho total de um diretório. Por isso o tamanho total de um diretório deve ser obtido pela soma do tamanho de seus arquivos e diretórios, da seguinte forma :

public static long Size(System.IO.DirectoryInfo dirInfo)
{
	long total = 0; 
 
	// Obtem o tamanho total dos arquivos no diretório
	foreach(System.IO.FileInfo file in dirInfo.GetFiles())
	total += file.Length; 
 
	// Obtem o tamanho total dos sub-diretórios da pasta
	foreach(System.IO.DirectoryInfo dir in dirInfo.GetDirectories())
	total += Size(dir); 
 
	return total;
}

É interessante observar que esta função é recursiva : Ao encontrar uma pasta a função chama a si mesma para poder calcular o tamanho da pasta e desta forma somar ao tamanho total.

No link abaixo há uma explicação mais detalha sobre Recursividade e os cuidados a considerar em seu uso:

http://pt.wikipedia.org/wiki/Recursividade

VBA – Excluindo arquivos e Movendo para a Lixeira

Lixeira
Lixeira

Programadores mais experientes sempre tiveram a mão uma função simples para exclusão de arquivos no VBA. A função Kill. A Macro abaixo exclui o arquivo no caminho informado:

Public Sub KillThem()
    Kill "C:\temp\delete.txt"
End Sub

Até aqui tudo bem. O inconveniente desta função é que o arquivo é definitivamente excluído, ou seja, não passa nem pela Lixeira. Em alguns casos isso pode até ser bom, em outros não, como por exemplo, selecionar um arquivo por engano.

Para isso, há uma pequena alternativa que seria a óbvia. Enviar o arquivo para a Lixeira. O código VBA abaixo permite a proeza:

Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Private Const FOF_NOCONFIRMATION = &H10
 
Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As Long
End Type
 
Private Declare Function SHFileOperation Lib _
 "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
 
Public Function Exclui_Arquivo(CaminhoArquivo As String) As Boolean
    Dim shfo As SHFILEOPSTRUCT
    Dim lresult As Long
 
    With shfo
        .wFunc = FO_DELETE
        .pFrom = CaminhoArquivo
        .fFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION
    End With
 
    lresult = SHFileOperation(shfo)
    Exclui_Arquivo = CBool(lresult = 0)
End Function
 
Um exemplo de chamada à função seria:
 
Public Sub Teste()
    Dim CaminhoArquivo As String
    CaminhoArquivo = "C:\temp\delete.txt"
    If Exclui_Arquivo(CaminhoArquivo) Then
        MsgBox "Arquivo " & CaminhoArquivo & " excluido com sucesso"
    Else
        MsgBox "Falha na exclusão do aquivo " & CaminhoArquivo
    End If
End Sub

É interessante notar que as constantes FOF_ALLOWUNDO e FOF_NOCONFIRMATION são utilizadas em cojunto. O resultado produzido é a efetivação da operação sem confirmação. Porém, se omitir o segundo, a caixa de confirmação de exclusão de arquivo padrão do Windows será mostrada.  Experimento deixar somente o FOF_ALLOWUNDO e execute o código novamente.

Não entrarei em detalhes da função SHFileOperation e da Estrutura SHFILEOPSTRUCT. Ambas estão bem detalhadas na documentação oficial:

SHFileOperation Function
SHFILEOPSTRUCT Structure

Bom proveito!