Nano Hash - криптовалюты, майнинг, программирование

Удаление файла из двоичной таблицы MSI не меняет размер файла MSI.

Я попытался найти свою проблему в Google, но без особого успеха. Я пытаюсь изменить файл MSI через winform С#. У меня проблема в том, что когда я удаляю файлы (которые я добавил!) из двоичной таблицы, записи исчезают, но размер файла MSI не уменьшается.

Вот как я добавляю новые файлы в двоичную таблицу:

        view = database.OpenView("INSERT INTO Binary (Name,Data) VALUES ('" + fileName + "', ?)");
        record = installer.CreateRecord(1);
        record.SetStream(1, filePath);
        view.Execute(record);            
        view.Close();
        if(record != null)
            Marshal.ReleaseComObject(record);
        Marshal.FinalReleaseComObject(view);
  • Коммит происходит позже в коде:

    database.Commit();
    Marshal.FinalReleaseComObject(database);
    Marshal.FinalReleaseComObject(installer); 
    

Вот как я удаляю запись:

  view = database.OpenView("SELECT * FROM Binary WHERE Name = '" + binary + "'");
  view.Execute(null);
  Record record = view.Fetch();
  if (record != null && record.FieldCount > 0)
  {                            
      view.Modify(MsiViewModify.msiViewModifyDelete, record);              
  }            
  view.Close();
  if (record != null)
      Marshal.ReleaseComObject(record);
  Marshal.FinalReleaseComObject(view);

Я не думаю, что есть проблема с удалением, поскольку файлы, которые были вставлены с помощью Orca, были удалены просто отлично.

Когда я удаляю (либо с помощью Orca, либо с помощью своего кода) запись, которая была вставлена ​​мной с помощью первого блока кода выше, запись исчезает, но размер файла MSI уменьшается всего на 10-20 КБ (вероятно, размер записи), даже если файл был 20MB.

Итак... В чем моя проблема...??

Надеюсь, я достаточно доступно объяснил вам ситуацию.

Кстати, просто добавлю, что я пытался вставить фотографию в двоичную таблицу, используя приведенный выше код, и извлек файл с помощью Orca. Это было хорошо, и фотография была в порядке. Так что это работает, просто неправильно, я думаю.


Ответы:


1

Вам следует подумать о том, чтобы сделать копию базы данных, а затем изменить копию. Затем вы можете сгенерировать преобразование на основе дельт. Хотя MSI является базой данных, это не полнофункциональная база данных, и я не знаю компактной функции.

17.03.2014

2

В случае, если кто-то столкнется с той же проблемой, проблема была вызвана тем, что я открыл базу данных в режиме MsiOpenDatabaseMode.msiOpenDatabaseModeDirect. Открытие в режиме MsiOpenDatabaseMode.msiOpenDatabaseModeTransact устранило проблему с размером файла.

17.03.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..