.aspx file:
<%@ Import Namespace="System.IO" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Explorer</title> </head> <body> <form id="form1" runat="server"> </form> </body> </html>
.CS file:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
public partial class view2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string path = "~/";
GetFilesFromDirectory(path);
}
private static void GetFilesFromDirectory(string DirPath)
{
try
{
DirectoryInfo Dir = new DirectoryInfo(DirPath);
FileInfo[] FileList = Dir.GetFiles("*.*", SearchOption.AllDirectories);
foreach (FileInfo FI in FileList)
{
Console.WriteLine(FI.FullName);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
I want to list the folders in a particular directory but it continuously showing blank page.Can anybody tell what’s the problem in the code.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Display directories and files on a blank page
// YourPage.aspx
<%@ Import Namespace="System.IO" %>
<html>
<body>
<% foreach (var dir in new DirectoryInfo("E:\TEMP").GetDirectories()) { %>
Directory: <%= dir.Name %><br />
<% foreach (var file in dir.GetFiles()) { %>
<%= file.Name %><br />
<% } %>
<br />
<% } %>
</body>
</html>
Method 2
Don’t use Console.WriteLine() use Response.Write(). You’re trying to write to the console in a web application.
Method 3
Console.WriteLine will write to the console, not the web page contents you are returning. You need to add a container element to your ASPX page, probably a grid view or repeater, then add assign the file list from the code behind file (to the HTML element you added, use the runat=’server’ tag and assign it an ID, then reference it by ID name in the code).
Method 4
Response.Write in a static codebehind method: DIRTY! In addition you did’t control the position where you write. This a little bit cleaner…
// YourPage.aspx
<%@ Import Namespace="System.IO" %>
<html>
<body>
<ul>
<% foreach(var file in Directory.GetFiles("C:\Temp", "*.*", SearchOption.AllDirectories)) { %>
<li><%= file %></li>
<% } %>
</ul>
</body>
</html>
Method 5
You can use Directory class
- The first parameter is the path it can be relative or absolute
- The second parameter for matching against the names of subdirectories in path. This parameter can contain a combination of valid literal and wildcard characters, but it doesn’t support regular expressions.
/
//using System.IO;
private void GetDirectories()
{
DataTable dt = new DataTable();
dt.Columns.Add("direction",typeof(string));
try
{
string[] dirs = Directory.GetDirectories(@"yourpath", "*", SearchOption.AllDirectories);
foreach (string dir in dirs)
{
dt.Rows.Add(dir);
}
if (dirs.Length <= 0)
{
lbl.text="your message"
}
rpt.DataSource = dt; //your repeater
rpt.DataBind(); //your repeater
}
catch (Exception e)
{
lbl.text="your message"//print message assign it to label
}
}
In the aspx page
<asp:Label runat="server" ID="lbl"></asp:Label>
<asp:Repeater ID="rpt" runat="server" ClientIDMode="AutoID">
<ItemTemplate>
<tr>
<td><%#Eval("direction")%></td>
</tr>
</ItemTemplate>
</asp:Repeater>
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0