IVsQueryEditQuerySave2.QueryEditFiles 方法

调用,当文件的编辑。

命名空间:  Microsoft.VisualStudio.Shell.Interop
程序集:  Microsoft.VisualStudio.Shell.Interop(在 Microsoft.VisualStudio.Shell.Interop.dll 中)

语法

声明
Function QueryEditFiles ( _
    rgfQueryEdit As UInteger, _
    cFiles As Integer, _
    rgpszMkDocuments As String(), _
    rgrgf As UInteger(), _
    rgFileInfo As VSQEQS_FILE_ATTRIBUTE_DATA(), _
    <OutAttribute> ByRef pfEditVerdict As UInteger, _
    <OutAttribute> ByRef prgfMoreInfo As UInteger _
) As Integer
int QueryEditFiles(
    uint rgfQueryEdit,
    int cFiles,
    string[] rgpszMkDocuments,
    uint[] rgrgf,
    VSQEQS_FILE_ATTRIBUTE_DATA[] rgFileInfo,
    out uint pfEditVerdict,
    out uint prgfMoreInfo
)

参数

  • rgpszMkDocuments
    类型:array<System.String[]
    [in] 要处理的文件。这是相同大小与 cFiles。它是无效的为了 cFiles 可以为 0。

返回值

类型:System.Int32

如果方法成功,则返回 S_OK。如果失败,它会返回一个错误代码。
在 pfEditCanceled 的返回值指示是否为编辑器是好的文件将继续。
该参数prgfMoreInfo 返回以下结果:

  • 任何文件是否签出

  • 任何文件是否在签出已更改

  • 任何文件是否在内存中编辑

  • 内存是否不允许编辑

  • 是否需要喧闹签出 (仅在无提示模式)

  • 签出是否已取消或失败

备注

COM 签名

从 ivsqueryeditquerysave2.idl

HRESULT QueryEditFiles(
   [in] VSQueryEditFlags rgfQueryEdit,
   [in] int cFiles,
   [in, size_is(cFiles)] const LPCOLESTR rgpszMkDocuments[],
   [in, size_is(cFiles)] const VSQEQSFlags rgrgf[],
   [in, size_is(cFiles)] const VSQEQS_FILE_ATTRIBUTE_DATA rgFileInfo[],
   [out] VSQueryEditResult *pfEditVerdict,
   [out] VSQueryEditResultFlags *prgfMoreInfo
);

编辑,定义为可以更改项目文件的内容的任何,应调用此方法,第一个在未更改的文档之前编辑。编辑解决方案的任何内容 (.sln) 文件的内容可以调用 QueryEditSolutionFile,将调用此方法。

  • 如果文件不是只读的和不受源代码管理下, QER_EditOK 返回。

  • 如果文件为只读,则为; 如果不在源代码管理下,属性,并且,如果 rgfQueryEdit 不包括 QEF_AllowInMemoryEdits (或选项 " 对话框设置禁止编辑只读文件),然后 QER_NoEdit_UserCanceled 无提示地返回,并且不应提交编辑到内存中数据。如果环境在降噪模式下,它将提示编辑器中移除的用户。

  • 如果文件为只读,则为; 如果不在源代码管理下,属性,并且,如果 rgfQueryEdit 包括 QEF_AllowInMemoryEdits (或选项 " 对话框设置允许内存编辑),然后 QER_EditOK 无提示地返回。

  • 如果文件为只读和在源代码管理下,是否为用户提供一个选择签出文件。如果文件已签入, QER_EditOK 返回;否则, QER_NoEdit_UserCanceled 返回。这种情况较为复杂,如果环境不支持 “签出本地版本”选项 (和考虑 reloadability),因此,如果用户已经有最新版本的文件,,并且,如果内存编辑器允许 (即 QEF_AllowInMemoryEdits)。但是,在大多数情况下,内存编辑签入文件是不可能的。

编辑、 Reloadability 和签出

当您调用 QueryEditFiles时,总是已检查的文件的潜在,而更改文件内容在内存和磁盘上。

由于已更改的内容可能,在更改实际对文件之前,,使文件更改的所有 Vspackage 应调用 QueryEditFiles 在第一次尝试更改文件的内容。如果 VSPackage 没有首先调用 QueryEditFiles ,因此,更改已对文件在内存中,这些内存更改可能会丢失由于已签出的文件。这被视为在 VSPackage 中的 bug。

有关是否更改了文件在 *prgfMoreInfo 返回通过 QER_ReloadedQER_Changed 标志返回值。

重要说明重要事项

,如果 QEF_DetectAnyChangedFile 标志。 rgfQueryEdit 传递给 QueryEditFiles 调用,QER_Changed 只返回。

如果文件在运行文档表,并且, QueryEditFiles 确定需要重载,它将尝试重新加载文件内容。如果它不能重新加载其数据,它显示建议的消息框用户手动关闭并重新打开文档。如果实现自定义编辑器,请参见有关如何的 IVsPersistDocData 支持的信息负荷繁重文档。

项目文件

将由调用 QueryEditFiles 的每个项目,更改将对在项目文件中保存的信息以及有关保存项目文件之前调用 QuerySaveFileQuerySaveFiles

.NET Framework 安全性

请参见

参考

IVsQueryEditQuerySave2 接口

Microsoft.VisualStudio.Shell.Interop 命名空间