遍例指定目录及子目录下的所有文件添加进数据库

如何获取指定目录包含的文件和子目录
    1. DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找;
    2. DirectoryInfo.GetDirectories():获取目录(不包含子目录)的子目录,返回类型为DirectoryInfo[],支持通配符查找;
    3. DirectoryInfo. GetFileSystemInfos():获取指定目录下(不包含子目录)的文件和子目录,返回类型为FileSystemInfo[],支持通配符查找;
如何获取指定文件的基本信息;
    FileInfo.Exists:获取指定文件是否存在;
    FileInfo.Name,FileInfo.Extensioin:获取文件的名称和扩展名;
    FileInfo.FullName:获取文件的全限定名称(完整路径);
    FileInfo.Directory:获取文件所在目录,返回类型为DirectoryInfo;
    FileInfo.DirectoryName:获取文件所在目录的路径(完整路径);
    FileInfo.Length:获取文件的大小(字节数);
    FileInfo.IsReadOnly:获取文件是否只读;
    FileInfo.Attributes:获取或设置指定文件的属性,返回类型为FileAttributes枚举,可以是多个值的组合
    FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分别用于获取文件的创建时间、访问时间、修改时间;

下面实例实现把文件信息读入数据库,发现使用注释部分测试的时候总是返回错误,使用前面的foreach可以正常读进数据库,不知道什么原因。

View Code
        [Test]
        [Category(
"Created")]
        
public void CanAddFileToDB()
        {
            ISessionFactory factory 
= new SessionFactory();
            IUnitOfWork unitOfWork 
= factory.CurrentUoW;
            IRepository repository 
= new Repository(unitOfWork);

            
string path = "U:\\幼教视频\\";
            
            List
<FileInfo> listfi = new List<FileInfo>();

            
foreach (FileInfo fi in FindFile(path, listfi))
            {
                var f 
= new Baby.Domain.Domain.UploadFile
                {
                    Id 
= Guid.NewGuid(),
                    FileName 
= fi.Name,
                    Descript 
= "descript",
                    FileType 
= "rmvb",
                    IsActive 
= true,
                    FileSize 
= (int)((fi.Length / 1024/ 1024),
                    FilePath 
= fi.DirectoryName,
                    IsWeb 
= false,
                    Postfix 
= fi.Extension,
                    SortOrder 
= 20,
                    CreatedBy 
= "system",
                    CreatedOn 
= System.DateTime.Now,
                    UpdatedBy 
= "System",
                    UpdatedOn 
= DateTime.Now
                };
                
                
if (repository.GetList<Baby.Domain.Domain.UploadFile>().Where(a => a.FileName == fi.Name).Count() == 0)
                {
                    unitOfWork.BeginTransaction(); 
                    repository.AddEntity(f);
                    unitOfWork.CommitTransaction();
                    Assert.That(f, Has.Property(
"Id").Not.EqualTo(Guid.Empty));
                };
             }

            
//FindFile(path, listfi).ForEach(fi =>
            
//{
            
//    if (repository.GetList<Baby.Domain.Domain.File>().Where(a => a.FileName == fi.Name).Count() == 0)
            
//    {
            
//        var f = new Baby.Domain.Domain.File
            
//        {
            
//            Id = Guid.NewGuid(),
            
//            FileName = fi.Name,
            
//            Descript = "descript",
            
//            FileType = "rmvb",
            
//            IsActive = true,
            
//            FileSize = (int)((fi.Length / 1024) / 1024),
            
//            FilePath = fi.DirectoryName,
            
//            IsWeb = false,
            
//            Postfix = fi.Extension,
            
//            SortOrder = 20,
            
//            CreatedBy = "system",
            
//            CreatedOn = System.DateTime.Now,
            
//            UpdatedBy = "System",
            
//            UpdatedOn = DateTime.Now
            
//        };

            
//        unitOfWork.BeginTransaction();
            
//        repository.AddEntity(fi);
            
//        unitOfWork.CommitTransaction();
            
//        Assert.That(fi, Has.Property("Id").Not.EqualTo(Guid.Empty));
            
//    }
            
//});
        }
        
public List<FileInfo> FindFile(string dirPath,List<FileInfo> fi) //参数dirPath为指定的目录
        {
            
//在指定目录及子目录下查找文件,并把文件加入到list中
            DirectoryInfo Dir = new DirectoryInfo(dirPath);
            
try
            {
                
//查找子目录 
                foreach (DirectoryInfo d in Dir.GetDirectories())
                {
                    FindFile(Dir 
+ d.ToString() + "\\",fi);
                }
                
foreach (FileInfo f in Dir.GetFiles("*.rmvb")) //查找文件
                {
                    fi.Add(f);
                }
            }
            
catch (Exception e)
            {
             }
            
return fi;
        }

posted on 2011-06-21 16:56  蹲在路边写代码  阅读(480)  评论(0编辑  收藏  举报

导航