首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

asp.net兑现文件夹遍历、文件大小统计等

2012-12-29 
asp.net实现文件夹遍历、文件大小统计等最近在做了一个文件批量导入数据库的功能。一上午导了2000多张图片,

asp.net实现文件夹遍历、文件大小统计等
最近在做了一个文件批量导入数据库的功能。一上午导了2000多张图片,很是过瘾,但还不满足,这里面应该还有很多待挖掘的东西.
比如如何获取一个文件夹下面的所有子文件和子目录,还统计整个文件夹所占的磁盘空间,我下面的代码不够只能智能,获取某个目录下面的子目录集合,只能手动加foreach实现,可否用一个foreache


protected void GetFileInfo()
        {

            List<mdl.Product> modelList = new List<mdl.Product>();
            string rootPath = "Picture/Import";//根目录下面的文件夹名称

            string mapPath = Server.MapPath("~/" + rootPath);
            DirectoryInfo rootDir = new DirectoryInfo(mapPath);//获取文件夹Picture对象
            DirectoryInfo[] dirs = rootDir.GetDirectories();////获取文件夹Picture下面的子文件夹对象集合

            try
            {
                foreach (var subDir in dirs)//1、2、3、4、5、6文件夹(系列ID)
                {
                            foreach (var itemFile in subDir.GetFiles())
                            {
                                mdl.Product model = new mdl.Product();

                                    //图片名字作为数据表对象Title字段
                                    model.CnTitle = itemFile.Name.Replace(".jpg", "").Replace(".JPG", "")+"#";
                                    model.EnTitle = model.CnTitle;
                                    
                                    model.TypeID = Convert.ToInt32(subDir.Name);//subDir.Name文件夹名称,即1、2、3、4、5、6
                                    var pic = rootPath + "/" + subDir.Name + "/" + itemFile.Name;
                                    //最终输出Picture/Import/1/2012-0912-334.jpgzhuru诸如此类的路径


                                    model.PicA = pic;
                                    model.PicB = pic;
                                    // modelList.Add(model);//测试的时候用这个集合
                                    DalProduct.Add(model);//插入数据库的方法
                    }
                }

                if (modelList.Count > 0)
                {
                    lalExec.Text = "导入成功,共计: " + modelList.Count + " 条数据";
                    qwe1.DataSource = modelList;
                    qwe1.DataBind();
                }
                else
                {
                    //  lalExec.Text = "导入失败,数据为空";
                }
            }
            catch (Exception ex)
            {
                lalExec.Text = "导入失败:" + ex.Message + "<br/>";
                lalExec.Text += ex.InnerException + "<br/>";
                lalExec.Text += ex.Source + "<br/>";
                lalExec.Text += ex.StackTrace + "<br/>";
                lalExec.Text += ex.TargetSite + "<br/>";

            }
        }


[解决办法]
遍历所有文件和子文件的文件?递归?
------解决方案--------------------


因为c#中获取目录使用GetDirectories()
但是获取文件使用GetFiles()
所以 LZ说的一个循环想要得到所以的目录以及目录下的文件 有点。。。


 private List<FileTree> GetTreeData(string path, int parent = 0)
        {
            List<FileTree> treeList = new List<FileTree>();
            DirectoryInfo dir = new DirectoryInfo(path);

            //添加文件夹
            foreach (DirectoryInfo directory in dir.GetDirectories())
            {
                treeList.Add(new FileTree
                {
                    TreeID = treeid,
                    TreeParent = parent,
                    FileName = directory.Name,
                    FullPath = directory.FullName + "\",
                    NodeType = "folder",
                    IconIndex = 0
                });
                treeList.AddRange(GetTreeData(directory.FullName, treeid++));
            }

            //添加文件
            foreach (FileInfo file in dir.GetFiles())
            {
                treeList.Add(new FileTree
                {
                    TreeID = treeid++,
                    TreeParent = parent,
                    FileName = file.Name,
                    FileSize = Convert.ToString(file.Length),
                    ModifyDate = file.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"),
                    FullPath = file.FullName,
                    NodeType = "file",


                    IconIndex = 1
                });
            }
            return treeList;
        }



我之前写的一个递归 放进一个树里面的 数据源,不知道LZ需不需要
[解决办法]
用ftp软件就可以了,还自己开发?
[解决办法]

        private List<FileInfo> GetAllFileName(string path)
        {
            List<FileInfo> nameList = new List<FileInfo>();
            DirectoryInfo rootDir = new DirectoryInfo(path);
            foreach (FileInfo fileInfo in rootDir.GetFiles("*.txt"))
            {
                nameList.Add(fileInfo);
            }
            foreach (DirectoryInfo dir in rootDir.GetDirectories())
            {
                nameList.AddRange(GetAllFileName(dir.FullName));
            }
            return nameList;
        }

这个是递归,给定一个目录可以返回该目录下所有子文件,包括所有子文件夹下的子文件,返回这些文件的对象。
[解决办法]
你的代码不做评论。只是提醒一点,对于大量的(或者你不确定是小量的)搜索,应该使用EnumerateDirectorie和EnumerateFiles,而不是GetDirectories和GetFiles。
[解决办法]
http://msdn.microsoft.com/zh-cn/library/ms143314(v=vs.80).aspx

热点排行