C#, ASP.NET – Listando pastas e arquivos de um diretório

outubro 13, 2008 at 2:23 am (1) (, , , , , , , )

Aqui está uma forma simples de listar o conteúdo (diretórios e arquivos) de uma pasta, transformando os arquivos em registro de uma DataTable e associá-la a um gridview. Com alguns comandos dentro do evento RowDataBound do GridView de destino, você pode criar um sistema de navegação entre os arquivos do seu website. Depois eu posto uma versão otimizada. O objeto DiretoryInfo é utilizado para listar as pastas e o objeto FileInfo para listar e obter informações sobre os arquivos.

“code with no comment rox!” – Alex

[]’s

protected void Page_Load(object sender, EventArgs e)
{
    loadFolder(GridView1, Server.MapPath("."));
}

public void loadFolder(GridView gv_arquivos, String folder)
{

    DirectoryInfo pasta = new DirectoryInfo(folder);
    DirectoryInfo[] subPastas = pasta.GetDirectories();
    FileInfo[] arquivos = pasta.GetFiles();

    DataTable dt = new DataTable();

    dt.Columns.Add("Nome");
    dt.Columns.Add("Tamanho");
    dt.Columns.Add("Tipo");
    dt.Columns.Add("Modificado");
    dt.Columns.Add("Action");

    if (folder != "")
    {
        DataRow dr1 = dt.NewRow();
        dr1["Nome"] = "../";

        dr1["Tamanho"] = "";
        dr1["Tipo"] = "";
        dr1["Modificado"] = "";
        dr1["Action"] = "";

        dt.Rows.Add(dr1);
    }
    foreach (DirectoryInfo dir in subPastas)
    {
        DataRow dr = dt.NewRow();
        dr["Nome"] = "/" + dir.Name;
        dr["Tamanho"] = "-";
        dr["Tipo"] = "Diretório";
        dr["Modificado"] = dir.LastWriteTime.ToString("dd/MM/yyyy");
        dr["Action"] = "";

        dt.Rows.Add(dr);
    }

    foreach (FileInfo file in arquivos)
    {
        DataRow dr = dt.NewRow();
        dr["Nome"] = file.Name;
        dr["Tamanho"] = Convert.ToString(file.Length / 1024) + " kb";
        dr["Tipo"] = file.Extension;
        dr["Modificado"] = file.LastWriteTime.ToString("dd/MM/yyyy");
        dr["Action"] = "";

        dt.Rows.Add(dr);
    }

    gv_arquivos.DataSource = dt;
    gv_arquivos.DataBind();

}

Link permanente 5 Comentários

Lendo e gravando Datatables em arquivos XML

outubro 9, 2008 at 11:56 pm (DOTNETBlog) (, , )

O objeto DataTable do ADO.NET possui dois métodos para fazer essa função: ReadXML e WriteXML, veja nos exemplos abaixo como configurar seus métodos de leitura e gravação sem ter muita dor de cabeça.

Parte 1: Importando o arquivo XML para o DataTable

O método ReadXML lê a partir de um arquivo de origem todos os dados contidos no arquivo e o transforma em linhas dentro de um DataTable. Caso o arquivo XML exista porém não contenha nenhuma linha a coleção de campos não será carregada, portanto é interessante configurar o DataTable antes do carregamento, isto facilita seu trabalho e a posterior inclusão/exclusão de registros.

Configurar uma coluna para ser a PrimaryKey é interessante também. Se você incluir uma coluna na sua tabela como chave e configurá-la como PrimaryKey poderá localizar e acessar rapidamente um único registro e acessar seus valores através do método Find() do objeto DataTable

        //Configura a tabela
        protected DataTable SetupTable()
        {
            DataTable post = new DataTable("MyTable");
            post.Columns.Add("id");
            post.Columns.Add("title");
            post.Columns.Add("description");
            DataColumn[] dc = new DataColumn[1];
            dc[0] = post.Columns["id"];
            post.PrimaryKey = dc;
            return post;
        }

        //Carrega a tabela
        protected DataTable LoadTable()
        {
            DataTable table = SetupTable();
            FileInfo file_info = new FileInfo("MyFile.xml");
            if (file_info.Exists)
                table.ReadXml(_file);
            return table;
        }

Parte 2: incluindo linhas e gravando o DataTable no arquivo XML

Aqui é mostrado, de uma maneira muito simples porém didática, uma forma de adicionar registros na DataTable. O importante é mostrar que a simples chamada do método criado anteriormente, LoadTable(), configura previamente o DataTable, sem se preocupar em se o arquivo contém ou não registros ou quais os nomes das colunas da tabela.

O método WriteXML atualiza o arquivo XML com as novas linhas inseridas

        //adiciona registros e salva o arquivo XML
        protected void AddRecords()
        {
            DataTable table = LoadTable();
            string[] row = { "AAAAAA", "Book 1", "description 1 description 1 description 1" }
            table.Rows.Add(row);
            row = { "BBBBB", "Book 2", "description 2 description 2 description 2" }
            table.Rows.Add(row);
            row = { "CCCCC", "Book 3", "description 3 description 3 description 3" }
            table.Rows.Add(row);
            table.WriteXML("MyFile.xml")
        }

Conclusão

Trabalhar com pequenas quantidades de informação é muito prático utilizando o objeto DataTable e arquivos XML. Note que é fácil fazer pequenos trechos de programa sem preocupação nenhuma com a semântica ou formatação do arquivo XML. O objeto DataTable trata automaticamente essas informações e ainda permite consultas e ordenação utilizando seus métodos nativos.

Link permanente Deixe um comentário

Codifique direito!

outubro 6, 2008 at 12:08 am (Geral) (, , , )

 

code review

code review

Link permanente Deixe um comentário

Punches

outubro 4, 2008 at 4:30 am (Geral)

KKKKKKKKK

Que viagem!

http://edge.famecast.com/actionfigure//AQ_PUNCHES_EDIT.mov

Link permanente Deixe um comentário

Novo projeto – CMS

setembro 23, 2008 at 2:46 am (Geral)

Atualmente tenho trabalhado bastante em pequenos trechos e tools de uma ferramente CMS. CMS´s (Content Management Systems) são sistemas de gerenciamento de conteúdo para Internet.

Basicamente um CMS é composto de um banco de dados, que armazena todo o conteúdo e configurações do site. Por exemplo, um cadastro de notícias, uma lista de enquetes, um cadastro de fornecedores, etc.

A partir do armazenamento das informações podemos seguir duas linhas em um sistema CMS, no que se refere a maneira de entregar o conteúdo armazenado no banco… cada um deles tem suas vantagens e desvantagens dependo do tipo de site/conteúdo que se pretende disponibilizar no site.

  1. Criação automática de páginas estáticas
  2. Criação de páginas dinâmicas que lêem o conteúdo a partir do banco de dados

1) Criação automática de páginas estáticas

O sistema é programado para gerar paginas em HTML dentro de “templates” pré configurados. Esse sistema é melhor para sites cujo principal atrativo é o conteúdo. Os templates podem ser configurados de forma a ter uma melhor organização de pastas, conter meta-tags de busca, permitir rastreamento completo para sistemas de buscas e implementar técnicas de SEO (Search Engine Optimization) para melhor rankeamento nos sites de busca. É possível também programar páginas dinâmicas com essas funcionalidades porém os ganhos em performance e alcance de conteúdo são incomparáveis com a criação de páginas estáticas no servidor.

2) Criação de páginas dinâmicas

Quando se fala na criação de páginas dinâmicas, estamos falando basicamente de desenvolvimento, e utilização de linguagens de programação para Internet (ou não) ASP.NET, PHP, Java, Perl.
A grande vantagem na utilização destas ferramentas é a atualização imediata do conteúdo uma vez cadastrado no banco de dados, maior flexibilidade e personalização. Toda página é processada no servidor antes de ser enviada para o cliente (browser). As páginas podem se apresentar de infinitas formas diferentes de acordo com os “parâmetros” recebidos. Parâmetros podem ser, por exemplo, campos de um formulário ou entradas de dados via URL (query strings). E-commerce/lojas virtuais são exemplos bem claros do melhor aproveitamento de utilização de páginas totalmente dinâmicas, permitindo maior controle dos estados da aplicação e maior rapidez de desenvolvimento. Imagine o stress de se controlar um carrinho de compras através de uma página contendo puro HTML/Javascript e alguns recursos de servidor.
Sem dúvida nestes casos a utilização de “programação na veia” pode ser a melhor opção.

Atualmente há diversas ferramentas de gerenciamento de conteúdo, open source e comerciais, disponíveis na Internet.

Trabalho há anos com gerenciamente de conteúdo para Internet com a utilização de páginas dinâmicas, com isso consegui fazer projetos extremamente grandes e complexo de portais, banco de dados, e-commerce de maneira inteligente, eficiente e cada vez mais rápidos.

Com o avanço nos mecanismos de busca, a revolução dos dispositivos móveis no acesso a Internet, ao grande avanço do Ajax, CSS, XML, bibliotecas em JavaScript (jQuery por exemplo) tenho tido muito interesse no desenvolvimento duma fusão entre essas duas tecnologias, onde eu enxergo possibilidades muito mais interessantes do que poderíamos sonhar a 5 anos atrás. Tanto do ponto de vista comercial, como no ponto de vista “artístico” (rs) e no prazer de se programar para Internet.

Muita gente já pensa assim e têm trabalhado dessa maneira, é verdade, só que agora é a minha vez hehe.

Eu quero é programar coisas bacanas! Que tal um novo CMS juntando o melhor dos dois mundos?

Link permanente Deixe um comentário

Short Code

setembro 21, 2008 at 9:52 pm (Geral)

Eu gosto de “short code” …. pequenas funções, bibliotecas, linhas especiais de código que resolvem nossos problemas e desafiam nossa mente.

Para quê usar 10 linhas se você pode fazer em duas?

é por isso que esse blog se chama for_each… o construtor mais bacana do mundo. Quer um exemplo?

/*
procura em cada item de uma coleção (ItemCollection) se o item é valido (propriedade isValid).Caso verdadeiro soma 1 a variavel count, caso contrario soma 2.
*/
int count = 0;
foreach (Item item in ItemCollection)
    count += (item.isValid) ? 1 : 2;

Link permanente Deixe um comentário

Crie um site como este com o WordPress.com
Comece agora