有如下代码: public partial class Form1 : Form
    {
        public Form1()
        {
            
            InitializeComponent();
        }
        public static long GetDirSize(String DirStr) {
            DirectoryInfo Dirinfo = new DirectoryInfo(DirStr);
            long FolderSize = 0;
            foreach (FileSystemInfo Fsi in Dirinfo.GetFileSystemInfos()) {
                if (Fsi.Attributes.ToString().ToLower() == "directory")
                {
                    FolderSize += GetDirSize(Fsi.FullName);
                }
                else {
                    if (File.Exists(Fsi.ToString()))
                    {
                        FileInfo fif = new FileInfo(Fsi.FullName);
                        FolderSize += fif.Length;
                    }
                }
            }
            return FolderSize;
        }        private void button1_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog()==DialogResult.OK) {
                textBox1.Text = folderBrowserDialog1.SelectedPath;
            }
        }        private void button2_Click(object sender, EventArgs e)
        {
            DirectoryInfo dir = new DirectoryInfo(textBox1.Text);
            FileInfo[] files = dir.GetFiles();
            DirectoryInfo[] directors = dir.GetDirectories();
            String Filddir="";
            foreach ( FileInfo arfiles in files ){
                if(Filddir==""){
                    Filddir=arfiles.ToString()+"|"+arfiles.Length;
                }
                else{
                    Filddir = Filddir + "," + arfiles.ToString()+"|"+arfiles.Length;
                }
            }
            foreach (DirectoryInfo dirinfo in directors) {
                Filddir = Filddir + ",文件夹:" + dirinfo.ToString() + "|" + GetDirSize(dirinfo.FullName);
            }
            richTextBox1.Text = Filddir.ToString();
            char[] splstr ={ ',','|' };
            String[] arrstr = Filddir.Split(splstr);
            dataGridView1.DataSource = arrstr;
            
        }
    }我的目的是将获得的的数组放入datagridview里,分位2列,一列是文件或者文件夹的名字,另一列为对应的文件或者文件夹大小,请教怎么弄,还有,如果路径里面文件太多,会死机跳出,这问题怎么解决?谢谢!

解决方案 »

  1.   

    如果非要区分的话,建议用键值对即可,文件夹或文件名字就是key,value来区分文件夹或文件。不过,一般来说,没有一次性全部读取的,这样肯定有问题。你可以采用递归方式,当点击文件夹的时候,再读取文件夹下面的所有子文件夹和文件进行绑定即可。我们实现目录树,都是通过不同的图标来区分的。
      

  2.   

    看一下 下面的例子吧。 private void LoadLocalPathTree()
            {
                //获取当前服务器上所有的磁盘分区
                string[] driverList = Directory.GetLogicalDrives();
                DriveInfo driverInfo = null;
                //目录浏览
                for (int i = 0; i < driverList.Length; i++)
                {
                    driverInfo = new DriveInfo(driverList[i]);
                    if (driverInfo.DriveType == DriveType.Fixed)
                    {
                        TreeNode node = new TreeNode();
                        node.Name = driverList[i];
                        node.Text = driverList[i];
                        node.ImageIndex = 4;
                        node.SelectedImageIndex = 4;
                        this.tvTree.Nodes.Add(node);
                    }
                }
                this.tvTree.SelectedNode = this.tvTree.Nodes[0];
            }
            //目录子节点
            private void AddNode(string path, TreeNode node)
            {
                DirectoryInfo info = new DirectoryInfo(path);
                //包含文件夹
                DirectoryInfo[] dirList = info.GetDirectories();
                for (int i = 0; i < dirList.Length; i++)
                {
                    string name = dirList[i].Name;
                    bool isExists = false;
                    foreach (TreeNode tn in node.Nodes)
                    {
                        if (tn.Text == name)
                        {
                            isExists = true;
                            break;
                        }
                    }                if (name != "System Volume Information" && !isExists)
                    {
                        TreeNode subNode = new TreeNode(name);
                        subNode.ImageIndex = 1;
                        subNode.SelectedImageIndex = 2;
                        node.Nodes.Add(subNode);
                    }
                }
                //包含文件
                FileInfo[] fList = info.GetFiles();
                for (int i = 0; i < fList.Length; i++)
                {                
                        string name = fList[i].Name;
                        bool isExists = false;
                        foreach (TreeNode tn in node.Nodes)
                        {
                            if (tn.Text == name)
                            {
                                isExists = true;
                                break;
                            }
                        }                    if (!isExists)
                        {
                            TreeNode subNode = new TreeNode(name);
                            subNode.ImageIndex = 3;
                            subNode.SelectedImageIndex = 3;
                            node.Nodes.Add(subNode);
                        }
                    }
            }        private void tvTree_AfterSelect(object sender, TreeViewEventArgs e)
            {
                if (((TreeView)sender).SelectedNode.ImageIndex != 3)
                    AddNode(this.tvTree.SelectedNode.FullPath, this.tvTree.SelectedNode);
                this.tvTree.SelectedNode.Expand();
            }
      

  3.   

    http://www.codeproject.com/KB/miscctrl/FileBrowser.aspx