我正在使用带有 C# 代码的 LiteDB 创建一个独立的数据库,用于存储每个文件的元数据,如文件大小、绝对路径、创建时间、扩展名等。我在查询和迭代 db 文件中的确切键值时遇到问题,请帮忙谢谢。
这是我的插入查询,它从目录中获取每个文件的绝对路径,并将路径作为变量传递给我的类,以设置文件元数据值并返回带有值的对象以存储在 LiteDB 中。
/插入查询/
public void Search(/* 驱动路径 */)
{
foreach(Directory.GetFiles(path, " . ") 中的字符串文件)
{
尝试
{
使用(var db = new LiteDatabase(/我的数据库文件的路径/))
{
var FileDBptr = db.GetCollection("FileDB");
var data = new FileInfoDB(file);
FileDBptr.Insert(数据);
Console.WriteLine("成功插入");
}
}
捕获(异常 e)
{
Console.WriteLine("不能创建数据库!!!!" + e);
}
} foreach(Directory.GetDirectories(path) 中的字符串 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;
}
}
}
}
//用于检索的查询代码
字符串文件名 = "$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);
}
}
}
}
这是存储在 lite 数据库文件中的数据格式
{
"_id": {"$oid":"5c4ebee0f2e2d05814dcf865"},
"文件名": "$ICN03Z0.txt",
"文件路径": "C:\$Recycle.Bin\S-1-5-21-3439349906-2439027251-2956315770-1001\$ICN03Z0.txt",
"文件扩展名":".txt",
"文件大小": {"$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"}
}
我希望先根据文件名搜索值,然后提取同一文件的所有其他键值对数据。我尝试使用 GitHub 中提到的 LINQ 进行不同的查询,但总是抛出异常。还使用 LiteDB shell 验证了存储在 Lite 数据库中的数据,其插入格式为上述格式,但检索出现问题。
提前致谢!