Общий файловый ресурс службы хранилища Azure теряет метаданные при обновлении файлов с помощью MS Word

Мы используем общий доступ к файлам через учетную запись хранения Azure. В рамках нашего приложения мы присваиваем идентификатор каждому файлу и сохраняем его в метаданных: ID в метаданных

Установите этот идентификатор с помощью этого блока кода:

    public static void SetId(this CloudFile cloudFile, Guid id)
    {
        cloudFile.Metadata[DocumentDbId] = id.ToString();
        cloudFile.SetMetadata();
    }

Однако, когда этот файл редактируется в Microsoft Word 2013 (все файлы имеют формат .docx), эти метаданные стираются, и мы теряем ссылки. введите здесь описание изображения

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

Почему редактирование в MS Word стирает метаданные? и как этого не допустить? Есть ли альтернативный способ установить произвольный идентификатор, который не стирается при редактировании?

UPD: Просто поясню, что это мой сценарий: я подключаю файловый ресурс как локальный диск через net use K: \http://myaccount.file.core.windows.net \tests /u:AZURE\myaccount uNrI0yyRxyMx, я помещаю файл .docx на диск. В MS Azure Storage Explorer я щелкаю файл правой кнопкой мыши, добавляю метаданные - любые метаданные, сохраняю их (пробовал это с С#, как указано выше, но результат тот же). Проверьте еще раз, чтобы убедиться, что метаданные были сохранены. Затем откройте этот файл с подключенного диска в MS Word, внесите изменения, сохраните его. Проверьте метаданные файла, там ничего нет.

Но если я создам текстовый файл, добавлю метаданные, затем отредактирую файл с помощью блокнота ++, сохраним его. Метаданные не удаляются. Итак, что-то, что MS Word делает, чтобы стереть метаданные


person trailmax    schedule 09.05.2017    source источник


Ответы (1)


У меня был подтверждение от инженера Microsoft Json Shay о том, что MS Word делает странные вещи при записи в файлы:

Причина в том, что MS Word (и многие приложения) используют Win32 ReplaceFile() API при сохранении файла, который фактически представляет собой набор операций перемещения+перемещения+удаления. В частности, MS Word:

Записывает новую версию файла во временный файл новый, не содержащий свойств: ~newfile.docx Переименовать существующий файл.docx --> существующий файл_резервной копии.docx Переименовать ~новый файл.docx --> существующий файл.docx Удалить существующий файл_резервной копии.docx Свойства были записаны в исходный файл существующего файла.docx, который затем переименовывается, а затем удаляется.

Это отличается от блокнота, который изменяет существующий файл на месте.

person trailmax    schedule 10.05.2017