遍例指定目录及子目录下的所有文件添加进数据库
如何获取指定目录包含的文件和子目录
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可以正常读进数据库,不知道什么原因。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[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中
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;
}