Я бы хотел проверить файлы или записи внутри архивов (zip, 7z, ...) по базе данных с помощью Crc32. Если файлы неизвестны, удалите их. Если файлы необходимо переименовать, переименуйте их и так далее ...
это структура, которую я реализовал до сих пор:
public class FileBase
{
public FileBase() { }
public string FullName { get; set; }
public string Name => Path.GetFileName(FullName);
public string FileNameWithoutExtension => Path.GetFileNameWithoutExtension(FullName);
public string DirectoryName => Path.GetDirectoryName(FullName);
public string Extension => Path.GetExtension(FullName);
public string Crc { get; set; }
public DateTime? LastWriteTime { get; set; }
}
public class FileModel : FileBase
{
public FileModel() { }
public void MoveTo(string target)
public void Delete()
}
public class ArchiveModel : FileModel
{
public ArchiveModel() { }
public HashSet<ArchiveFileModel> Entries{ get; private set; }
public Dictionary<string, Stream> Extract(List<ArchiveFileModel> entries)
public void Compress(Dictionary<string, Stream> fileStreams)
public void Modify(ArchiveInfoFile entry, string targetName)
}
public class ArchiveFileModel : FileBase
{
public ArchiveFileModel() { }
public int Index { get; set; }
public ArchiveModel Parent { get; set; }
}
Теперь я создаю список типа FileBase который содержит FileModels или ArchiveModels (в зависимости от расширения файла) до l oop, хотя каждый файл и проверяется на соответствие базе данных.
Нижняя часть этого, для каждого необходимого действия (MoveTo, Delete, Extract, Compress, Modify) Мне нужно преобразовать объекты базового класса в объекты производного класса (что я считаю плохой практикой):
var fileList = new List<FileBase>;
.
.
.
foreach (file in fileList)
{
If (file is ArchiveFileModel)
{
var archive = file as ArchiveFileModel;
archive.Compress(....
...
}
}
и так далее ....
Есть ли у кого-нибудь другие идеи для решить этот прецедент?