Exemplo n.º 1
0
def parse_disk_image(io_manager: IOManager):
    """
    Разбирает образ диска, доступ к которому получен через io_manager
    :param io_manager: менеджер, необходимый для работы с образом
    :return: FileSystem
    """
    info = InfoAboutImage(io_manager)

    f_processor = ImageTools.FatProcessor(info, io_manager)
    error_detector = ErrorDetector(f_processor)
    d_parser = ImageTools.DirectoryParser(f_processor)
    ft_printer = ImageTools.FileTreePrinter(d_parser)

    if error_detector.check_differences_fats():
        return FileSystem(info, f_processor, {}, error_detector)

    ft_indexer = ImageTools.FatTableIndexer(d_parser)
    full_indexed_fat_table = ft_indexer.get_full_indexed_fat_table()

    if error_detector.analysis_fat_indexed_table(full_indexed_fat_table):
        return FileSystem(info, f_processor, full_indexed_fat_table,
                          error_detector)

    correct_indexed_fat_table = ft_indexer.get_correct_indexed_fat_table()

    file_system = FileSystem(info, f_processor, correct_indexed_fat_table,
                             error_detector)
    file_system.set_file_tree_printer(ft_printer)

    return file_system
 def fix_looped_files(self):
     """
     Избавляется от найденных зацикленных файлов
     :return: None
     """
     dir_parser = ImageTools.DirectoryParser(self._fat_proc)
     for entry in self.looped_files:
         dir_parser.delete_entry_in_directory(
             entry.dir_entry_info.entry_point)
         self._name_of_indexed_files_to_remove.add(
             entry.dir_entry_info.name)
     self.looped_files = []
 def fix_intersecting_files(self):
     """
     Избавляется от найденных пересекающихся файлов
     :return: None
     """
     dir_parser = ImageTools.DirectoryParser(self._fat_proc)
     for list_entries in self.intersecting_files:
         for entry in list_entries:
             dir_parser.delete_entry_in_directory(
                 entry.dir_entry_info.entry_point)
             self._name_of_indexed_files_to_remove.add(
                 entry.dir_entry_info.name)
     self.intersecting_files = []