Я создаю автономную базу данных с использованием LiteDB с кодом C # для хранения метаданных каждого файла, таких как размер файла, абсолютный путь, время создания, расширение и т. Д. У меня возникли проблемы при запросе и повторении точного значения ключа из файла db, пожалуйста, помогитеСпасибо
Это мой запрос на вставку, который берет абсолютные пути для каждого файла из каталогов и передает путь в качестве переменной моему классу для установки значений метаданных файла и возврата объекта со значениями для хранения в LiteDB.
/ INSERT QUERY /
public void Поиск (/ * Пути дисков * /)
{
foreach (строковый файл вDirectory.GetFiles (путь, ". "))
{
try
{
с использованием (var db = newLiteDatabase (/ путь к моему файлу БД /))
{
var FileDBptr = db.GetCollection ("FileDB");
var data= новый FileInfoDB (файл);
FileDBptr.Insert (данные);
Console.WriteLine ("INCCERT УСПЕХА");
}
}
catch (Exception e)
{
Console.WriteLine ("COuld Not Create DB !!!!" + e);
}
} foreach (строка subDir в Directory.GetDirectories (path))
{
try
{
Поиск (subDir);
}
catch
{
throw;
}
}
}
/ * МОДЕЛЬ КЛАССА * /
[Сериализуемый]
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";
try {
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"},
"FileName": "$ 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"}
}
Я ожидаю найти значение в соответствии с filenaсначала я, а затем извлеките все остальные пары значений ключа из одного и того же файла.Я пытался с другим запросом, используя LINQ, как упоминалось в GitHub, но всегда выбрасывал исключение.Также проверили данные, хранящиеся в базе данных Lite, используя вставку оболочки LiteDB в указанном выше формате, но поиск вызывает проблемы.
Заранее спасибо!