Поделиться через


Сохранение стандартного документа

Среда обрабатывает команды "Сохранить", "Сохранить как" и "Сохранить все". Когда пользователь выбирает "Сохранить", "Сохранить как" или "Сохранить все" в меню "Файл" или закрывает решение, в результате чего будет сохранено все, происходит следующий процесс.

Стандартный редактор

Сохранение, сохранение и сохранение всех команд для стандартного редактора

Этот процесс подробно описан в следующих шагах:

  1. При выборе команд "Сохранить и сохранить как" среда использует SVsShellMonitorSelection службу для определения активного окна документа и, следовательно, того, какие элементы следует сохранить. После того как активное окно документа известно, среда находит указатель иерархии и идентификатор элемента (itemID) для документа в работающей таблице документов. Дополнительные сведения см. в статье "Запуск таблицы документов".

    При выборе команды "Сохранить все" среда использует сведения в работающей таблице документов для компиляции списка всех элементов для сохранения.

  2. Когда решение получает QueryStatus вызов, он выполняет итерацию по набору выбранных элементов (т. е. несколько выбранных элементов, предоставляемых SVsShellMonitorSelection службой).

  3. На каждом элементе в выборе решение использует указатель иерархии для вызова IsItemDirty метода, чтобы определить, должна ли быть включена команда меню "Сохранить ". Если один или несколько элементов грязное, то включена команда "Сохранить". Если иерархия использует стандартный редактор, иерархия делегирует запросы к грязное состоянию в редактор путем вызова IsDocDataDirty метода.

  4. На каждом выбранном элементе, грязное, решение использует указатель иерархии для вызова SaveItem метода в соответствующих иерархиях.

    Обычно иерархия использует стандартный редактор для редактирования документа. В этом случае объект данных документа для этого редактора должен поддерживать IVsPersistDocData2 интерфейс. При получении SaveItem вызова метода проект должен сообщить редактору о том, что документ сохраняется путем вызова SaveDocData метода в объекте данных документа. Редактор может разрешить среде обрабатывать диалоговое окно "Сохранить как ", вызвав Query Service SVsUIShell интерфейс. Возвращает указатель на IVsUIShell интерфейс. Затем редактор должен вызвать SaveDocDataToFile метод, передав указатель на реализацию редактора IPersistFileFormat pPersistFile с помощью параметра. Затем среда выполняет операцию сохранения и предоставляет диалоговое окно "Сохранить как " для редактора. Затем среда возвращается в редактор.IPersistFileFormat

  5. Если пользователь пытается сохранить неинициализированный документ (то есть ранее несохраняемый документ), то фактически выполняется команда Save As.

  6. В команде "Сохранить как" в среде отображается диалоговое окно "Сохранить как" с запросом пользователя на имя файла.

    Если имя файла изменилось, иерархия отвечает за обновление кэшированных сведений кадра документа путем вызова вызова SetProperty(VSFPROPID_MkDocument).

    Если команда "Сохранить как" перемещает расположение документа и иерархия учитывает расположение документа, иерархия отвечает за передачу владения открытым окном документа в другую иерархию. Например, это происходит, если проект отслеживает, является ли файл внутренним или внешним файлом (прочим файлом) в отношении проекта. Используйте следующую процедуру, чтобы изменить владение файлом в проекте "Другие файлы".

Изменение прав владения файлами

Изменение владельца файла на проект "Другие файлы"

  1. Служба запросов для SVsExternalFilesManager интерфейса.

    Возвращается указатель IVsExternalFilesManager2 .

  2. TransferDocument Вызовите метод (pszMkDocumentNew,punkWindowFrame) для передачи документа в новую иерархию. Иерархия, выполняющая команду Save As, вызывает этот метод.