A quick and easy way to load files and directories contained in a specified folder into a DataTable.
[code language="C#"]
using System;
using System.Data;
using System.IO;
namespace KeithRull.Utilities
{
/// <summary>
/// A collection of methods that handles the processing of FileSystem data and information
/// </summary>
public sealed class FileSytem
{
private FileSytem(){}
/// <summary>
/// A method that accepts a string that points to a directory,
/// reads that folders contents and convert that data into a DataTable
/// </summary>
/// <param name="directory">the directory to browse</param>
/// <returns>a DataTable containing the information about the supplied directory</returns>
public static DataTable FileSystemToDataTable(string directory)
{
//read the folder
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
//create our datatable that would hold the list
//of folders in the specified directory
DataTable filesystem = new DataTable();
/* Add the columns to our datatable
* You can add as many colums as you like.
* for this demo, we will just be adding this columns
* */
filesystem.Columns.Add(new DataColumn("Name"));
filesystem.Columns.Add(new DataColumn("FullName"));
filesystem.Columns.Add(new DataColumn("CreationTime"));
filesystem.Columns.Add(new DataColumn("LastWriteTime"));
//loop thru each FileSystemInfo object in the specified directory
foreach (FileSystemInfo fileSystemInfo in directoryInfo.GetFileSystemInfos())
{
//create a new row in ould filesystem table
DataRow dataRow = filesystem.NewRow();
//assign the values to our table members
dataRow["Name"] = fileSystemInfo.Name;
dataRow["FullName"] = fileSystemInfo.FullName;
dataRow["CreationTime"] = fileSystemInfo.CreationTime;
dataRow["LastWriteTime"] = fileSystemInfo.LastWriteTime;
// add the datarow to our datatable
filesystem.Rows.Add(dataRow);
}
//return our table
return filesystem;
}
}
}
[/code]
Sample usage would be as follows:
[code language="C#"]
string directory = Server.MapPath(""); //load a specific path in our web server
DataGrid1.DataSource = KeithRull.Utilities.FileSytem.FileSystemToDataTable(directory);
DataGrid1.DataBind();
[/code]
or
[code language="C#"]
string directory = "c:\"; //just point to a folder in the machine
DataGrid1.DataSource = KeithRull.Utilities.FileSytem.FileSystemToDataTable(directory);
DataGrid1.DataBind();
[/code]
*update: Here's the VB.NET version as requested
[code language="VB.NET"]
Imports System
Imports System.Data
Imports System.IO
Namespace KeithRull.Utilities
Public NotInheritable Class FileSytem
Private Sub New()
End Sub
Public Shared Function FileSystemToDataTable(ByVal directory As String) As DataTable
Dim directoryInfo As DirectoryInfo = New DirectoryInfo(directory)
Dim filesystem As DataTable = New DataTable
filesystem.Columns.Add(New DataColumn("Name"))
filesystem.Columns.Add(New DataColumn("FullName"))
filesystem.Columns.Add(New DataColumn("CreationTime"))
filesystem.Columns.Add(New DataColumn("LastWriteTime"))
For Each fileSystemInfo As FileSystemInfo In directoryInfo.GetFileSystemInfos
Dim dataRow As DataRow = filesystem.NewRow
dataRow("Name") = fileSystemInfo.Name
dataRow("FullName") = fileSystemInfo.FullName
dataRow("CreationTime") = fileSystemInfo.CreationTime
dataRow("LastWriteTime") = fileSystemInfo.LastWriteTime
filesystem.Rows.Add(dataRow)
Next
Return filesystem
End Function
End Class
End Namespace
[/code]
Posted
05-12-2006 6:25 PM
by
keithrull