C#实现的列出目录下所有子目录和文件

时间:2021-08-29 12:59:42
在C#的Winform中,如何實現列出目录下所有子目录和文件。
在服務器A中會有一個網絡映射盤O:盤,當客戶在自已的電腦上運行Winform,要實現對A服務器裡的O:盤進行瀏覽。。
並可以下載文件

以上功能要怎麼實現?

13 个解决方案

#1



using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class TreeViewDemo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //获取当前服务器上所有的磁盘分区
            string[] driverList= Directory.GetLogicalDrives();
            DriveInfo driverInfo = null;
            for (int i = 0; i < 1; i++)//driverList.Length;
            {
                driverInfo = new DriveInfo(driverList[i]);
                if (driverInfo.DriveType == DriveType.Fixed)
                {
                    TreeNode node = new TreeNode(driverList[i]);
                    tvFileList.Nodes.Add(node);
                    AddNode(driverList[i],node);
                }
            }
        }
    }

    private void AddNode(string path,TreeNode node)
    {
        DirectoryInfo info = new DirectoryInfo(path);
        DirectoryInfo[] dirList=info.GetDirectories();//获取文件夹下所有的子文件夹,不包含子文件夹下的文件夹
        //info.GetFiles();//获取文件夹下所有的文件,不包含子文件夹下的文件
        for (int i = 0; i < dirList.Length; i++)
        {
            string name=dirList[i].Name;
            if (name != "System Volume Information")
            {
                TreeNode subNode = new TreeNode(name);
                node.ChildNodes.Add(subNode);
                //继续递归调用本方法
                AddNode(dirList[i].FullName,subNode);
            }
        }
    }
}

#2


上面的是给别人演示的一个例子,虽然演示的时候是在Web下,但是完全可以改在WinForm下。

#3



            System.IO.Directory.GetDirectories("O:\"); 
            System.IO.Directory.GetFiles("O:\");  

#4


請給一個winform的代碼嘛

#5


递归。

#6



      public void FindAllFile(string path)
      {
         DirectoryInfo[] ChildDirectory;//子目录集
          FileInfo[] NewFileInfo;//当前所有文件
          DirectoryInfo FatherDirectory=new DirectoryInfo(path); //当前目录
          ChildDirectory=FatherDirectory.GetDirectories("*.*"); //得到子目录集
          NewFileInfo=FatherDirectory.GetFiles();//得到文件集,可以进行操作
          foreach(DirectoryInfo dirInfo in ChildDirectory)
         {
              FindAllFile(dirInfo.FullName);
         }
      }

#7



public ArrayList al=new ArrayList();

public void GetAllDirList(string strBaseDir)
{
    DirectoryInfo di=new DirectoryInfo(strBaseDir);
    DirectoryInfo[] diA=di.GetDirectories();
    for(int i=0;i<diA.Length;i++)
    {
     al.Add(diA[i].FullName);
    //diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中
     GetAllDirList(diA[i].FullName);
    //注意:递归了。逻辑思维正常的人应该能反应过来
    }
}

#8


引用 7 楼 HDNGO 的回复:
C# codepublicArrayList al=newArrayList();publicvoidGetAllDirList(stringstrBaseDir)
{
    DirectoryInfo di=newDirectoryInfo(strBaseDir);
    DirectoryInfo[] diA=di.GetDirectories();for(inti=0;i<diA.Length;i++)
    {
     al.Add(diA[i].FullName);//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中GetAllDirList(diA[i].FullName);//注意:递归了。逻辑思维正常的人应该能反应过来}
}

#9


給一個完整的代碼

#10


他们的解决办法都比较好了,我也来学习下吧!

#11


学习了!

#12


代码是根据2楼的改的,如果O盘下好多文件,运行起来好慢,死了几次       

 /// <summary>
        /// 获取盘符
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGetDisk_Click(object sender, EventArgs e)
        {
            //获取当前服务器上所有的磁盘分区
            //string[] driverList = Directory.GetLogicalDrives();
            //DriveInfo driverInfo = null;
            //for (int i = 0; i < 1; i++)//driverList.Length;
            //{
            //    driverInfo = new DriveInfo(driverList[i]);
            //    if (driverInfo.DriveType == DriveType.Fixed)
            //    {
            //        TreeNode node = new TreeNode(driverList[i]);
            //        //tvFileList.Nodes.Add(node);
            //        treeView1.Nodes.Add(node);
            //        AddNode(driverList[i], node);


            //    }
            //}

//path的值用folderBrowerdialog获取也行
            string path = @"f:\";

            TreeNode node = new TreeNode(path);
            treeView1.Nodes.Add(node);
            AddNode(path, node);
            
        }


        private void AddNode(string path, TreeNode node)
        {
            DirectoryInfo info = new DirectoryInfo(path);
            DirectoryInfo[] dirList = info.GetDirectories();//获取文件夹下所有的子文件夹,不包含子文件夹下的文件夹
            //info.GetFiles();//获取文件夹下所有的文件,不包含子文件夹下的文件
            for (int i = 0; i < dirList.Length; i++)
            {
                string name = dirList[i].Name;
             
                    TreeNode subNode = new TreeNode(name);
                    node.Nodes.Add(subNode);
            
                    //node.ChildNodes.Add(subNode);
                    //继续递归调用本方法
                    AddNode(dirList[i].FullName, subNode);
                
            }
        }

#13


顶。。。。。。。。。。。。

#1



using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class TreeViewDemo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //获取当前服务器上所有的磁盘分区
            string[] driverList= Directory.GetLogicalDrives();
            DriveInfo driverInfo = null;
            for (int i = 0; i < 1; i++)//driverList.Length;
            {
                driverInfo = new DriveInfo(driverList[i]);
                if (driverInfo.DriveType == DriveType.Fixed)
                {
                    TreeNode node = new TreeNode(driverList[i]);
                    tvFileList.Nodes.Add(node);
                    AddNode(driverList[i],node);
                }
            }
        }
    }

    private void AddNode(string path,TreeNode node)
    {
        DirectoryInfo info = new DirectoryInfo(path);
        DirectoryInfo[] dirList=info.GetDirectories();//获取文件夹下所有的子文件夹,不包含子文件夹下的文件夹
        //info.GetFiles();//获取文件夹下所有的文件,不包含子文件夹下的文件
        for (int i = 0; i < dirList.Length; i++)
        {
            string name=dirList[i].Name;
            if (name != "System Volume Information")
            {
                TreeNode subNode = new TreeNode(name);
                node.ChildNodes.Add(subNode);
                //继续递归调用本方法
                AddNode(dirList[i].FullName,subNode);
            }
        }
    }
}

#2


上面的是给别人演示的一个例子,虽然演示的时候是在Web下,但是完全可以改在WinForm下。

#3



            System.IO.Directory.GetDirectories("O:\"); 
            System.IO.Directory.GetFiles("O:\");  

#4


請給一個winform的代碼嘛

#5


递归。

#6



      public void FindAllFile(string path)
      {
         DirectoryInfo[] ChildDirectory;//子目录集
          FileInfo[] NewFileInfo;//当前所有文件
          DirectoryInfo FatherDirectory=new DirectoryInfo(path); //当前目录
          ChildDirectory=FatherDirectory.GetDirectories("*.*"); //得到子目录集
          NewFileInfo=FatherDirectory.GetFiles();//得到文件集,可以进行操作
          foreach(DirectoryInfo dirInfo in ChildDirectory)
         {
              FindAllFile(dirInfo.FullName);
         }
      }

#7



public ArrayList al=new ArrayList();

public void GetAllDirList(string strBaseDir)
{
    DirectoryInfo di=new DirectoryInfo(strBaseDir);
    DirectoryInfo[] diA=di.GetDirectories();
    for(int i=0;i<diA.Length;i++)
    {
     al.Add(diA[i].FullName);
    //diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中
     GetAllDirList(diA[i].FullName);
    //注意:递归了。逻辑思维正常的人应该能反应过来
    }
}

#8


引用 7 楼 HDNGO 的回复:
C# codepublicArrayList al=newArrayList();publicvoidGetAllDirList(stringstrBaseDir)
{
    DirectoryInfo di=newDirectoryInfo(strBaseDir);
    DirectoryInfo[] diA=di.GetDirectories();for(inti=0;i<diA.Length;i++)
    {
     al.Add(diA[i].FullName);//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中GetAllDirList(diA[i].FullName);//注意:递归了。逻辑思维正常的人应该能反应过来}
}

#9


給一個完整的代碼

#10


他们的解决办法都比较好了,我也来学习下吧!

#11


学习了!

#12


代码是根据2楼的改的,如果O盘下好多文件,运行起来好慢,死了几次       

 /// <summary>
        /// 获取盘符
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGetDisk_Click(object sender, EventArgs e)
        {
            //获取当前服务器上所有的磁盘分区
            //string[] driverList = Directory.GetLogicalDrives();
            //DriveInfo driverInfo = null;
            //for (int i = 0; i < 1; i++)//driverList.Length;
            //{
            //    driverInfo = new DriveInfo(driverList[i]);
            //    if (driverInfo.DriveType == DriveType.Fixed)
            //    {
            //        TreeNode node = new TreeNode(driverList[i]);
            //        //tvFileList.Nodes.Add(node);
            //        treeView1.Nodes.Add(node);
            //        AddNode(driverList[i], node);


            //    }
            //}

//path的值用folderBrowerdialog获取也行
            string path = @"f:\";

            TreeNode node = new TreeNode(path);
            treeView1.Nodes.Add(node);
            AddNode(path, node);
            
        }


        private void AddNode(string path, TreeNode node)
        {
            DirectoryInfo info = new DirectoryInfo(path);
            DirectoryInfo[] dirList = info.GetDirectories();//获取文件夹下所有的子文件夹,不包含子文件夹下的文件夹
            //info.GetFiles();//获取文件夹下所有的文件,不包含子文件夹下的文件
            for (int i = 0; i < dirList.Length; i++)
            {
                string name = dirList[i].Name;
             
                    TreeNode subNode = new TreeNode(name);
                    node.Nodes.Add(subNode);
            
                    //node.ChildNodes.Add(subNode);
                    //继续递归调用本方法
                    AddNode(dirList[i].FullName, subNode);
                
            }
        }

#13


顶。。。。。。。。。。。。