我正在使用带有C#代码的LiteDB创建一个独立的数据库,用于存储每个文件元数据,例如文件大小,绝对路径,创建时间,扩展名等。我在查询和迭代db文件中的确切键值时遇到问题,请帮助谢谢。
这是我的插入查询,它从目录中获取每个文件的绝对路径,并将该路径作为变量传递给我的类,以设置文件元数据值并返回带有要存储在LiteDB中的值的对象。
/ 插入查询 /
公共无效搜索(/ *驱动器路径* /)
{
foreach(Directory.GetFiles(路径,“ 。”))中的字符串文件)
{
尝试
{
使用(var db = new LiteDatabase(/ 我的数据库文件的路径 /))
{
var FileDBptr = db.GetCollection(“ FileDB”);
var data = new FileInfoDB(file);
FileDBptr.Insert(data);
Console.WriteLine(“成功插入”);
}
}
捕获(异常e)
{
Console.WriteLine(“无法创建数据库!!!!” + e);
}
} foreach(Directory.GetDirectories(path)中的字符串subDir)
{
尝试
{
Search(subDir);
}
抓住
{
扔;
}
}
}
/ *类模型* /
[可序列化]
public class FileInfoDB
{
[BsonId]
public ObjectId FileId { get; set; }
public string FileName { get; set; }
public string FilePath { get; set; }
public string FileExtension { get; set; }
public long FileSize { get; set; }
public DateTime FileCreateTime { get; set; }
public DateTime FileLastAccess { get; set; }
public DateTime FileLastWrite { get; set; }
public FileInfoDB(string path)
{
if (File.Exists(path))
{
try
{
FileInfo f = new FileInfo(path);
FileId= ObjectId.NewObjectId();
FileName = f.Name;
FilePath = f.FullName;
FileCreateTime = f.CreationTime;
FileSize = f.Length; //Size in bytes
FileExtension = f.Extension;
FileLastAccess = f.LastAccessTime;
FileLastWrite = f.LastWriteTime;
}
catch (Exception)
{
throw;
}
}
}
}
//要查询的查询代码
string fileName =“ $ ICN03Z0.txt”;
尝试 {
using (var db = new LiteDatabase(_jsonpath))
{
var FileDBptr = db.GetCollection<FileInfoDB>("FileDB");
FileDBptr.EnsureIndex(x=>x.FileName);
var data2 = FileDBptr.Find(Query.EQ("FileName", fileName));
int c = FileDBptr.Count();
Console.WriteLine(c); //Correct output
if (data2 !=null)
{
foreach (var a in data2) //Throwing an Exception
{
Console.WriteLine(a.FileName);
}
}
}
}
这是存储在精简版数据库文件中的数据格式
{
“ _ id”:{“ $ oid”:“ 5c4ebee0f2e2d05814dcf865”},
“文件名”:“ $ ICN03Z0.txt”,
“ FilePath”:“ C:\ $ Recycle.Bin \ S-1-5-21-3439349906-2439027251-2956315770-1001 \ $ ICN03Z0.txt”,
“ FileExtension”:“。txt”,
“ FileSize”:{“ $ numberLong”:“ 114”},
“ FileCreateTime”:{“ $ date”:“ 2019-01-16T09:04:16.0810000Z”},
“ FileLastAccess”:{“ $ date”:“ 2019-01-16T09:04:16.0810000Z”},
“ FileLastWrite”:{“ $ date”:“ 2019-01-16T09:04:16.0810000Z”}
}
我希望首先根据文件名搜索值,然后提取同一文件的所有其他键值对数据。 我尝试使用LINQ中的LINQ进行其他查询,但总是抛出异常。也已经使用LiteDB shell验证了存储在Lite数据库中的数据的插入格式,但是检索却出现了问题。
预先感谢!