Merge は仮想ファイル システムをサポートしているため、ユーザーのハード ディスクまたはコンピュータ上にないファイルやフォルダにもアクセスすることができます。仮想ファイル システムの例には FTP、HTTP および SCM 統合などがあります。
新しい(または現在サポートされていない)ファイル システムのサポートは、定義済みインターフェイスのセットをインプリメントするわずかな COM コンポーネントのセットを記述することによって Merge に追加することができます。主要なインターフェイスは IFileSystem インターフェイスで、仮想ファイル システムへのエントリ ポイントを提供します。
Merge での新しいファイル システムの登録
ファイル システム プラグインは、Merge インストール フォルダにある vfsplugins.ini ファイルにセクションを追加して Merge に登録します。 vfsplugins.ini ファイルでは、プラグインを使用可能にする URL 体系をリストし、その構成のファイル システムへのアクセスをインプリメントする役目を担う COM コンポーネントの名前を Merge に提供します。 vfsplugins.ini のサンプル ファイルを以下に示します。
[.] progid=Merge.Win32VFS description=Win32 autoregister=fsplugin.dll [ftp] progid=Merge.FtpVFS description=FTP autoregister=fsplugin.dll
vfsplugins.ini ファイルはセクションで構成されます。セクション数に制限はありません。各セクションはファイル システム プラグイン コンポーネントで処理される URL 構成で開始します。 この . 構成用に登録したコンポーネントは、ほかのセクションからは明示的に処理されない URL を処理するために使用します。
最初のセクション([.] で始まる)は Win32 ファイル システム プラグインを登録します。これは Win32 ファイル パス(c:¥temp¥file.txt、¥¥server¥path¥file.txt、¥path¥file.txt など)やほかの登録済みプラグインで処理されない URL を処理します。 2 番目のセクション([ftp] で始まる)は ftp 構成(ftp://ftp.microsoft.com/ など)を使用する URL を処理するプラグインを登録します。
セクション内の各行は等号記号で区切ったキーと値で構成されます。次の表では使用できるキーと、このキーが提供する値を示します。
| キー | 値 |
|---|---|
| progid | IFileSystem インターフェイスをインプリメントする COM コンポーネントのプログラム ID。 プログラム ID にはバージョンに依存する値(Merge.Win32VFS.1)またはバージョンに依存しない値(Merge.Win32VFS)を使用できます。
|
| description | プラグインによって提供されるファイル システム サポートの説明。 |
| autoregister | プログラム ID で指定したコンポーネントが Merge で作成できない場合、autoregister キーに指定した DLL がそのDllRegisterServer エントリ ポイントを使用して登録され、作成操作を再試行します。このキーの値はプラグイン DLL の、Merge インストール フォルダに対する相対的な場所を指定します。
|
このインターフェイスをインプリメントするコンポーネントは、通常 IFileSystemInit も同様にインプリメントします。
スレッド モデル
仮想ファイル システム コンポーネントのサーバーは、インプロセス サーバーとしてまたはローカル サーバーとしてインプリメントすることができます。パフォーマンスの観点から、サーバーはインプロセスで、Apartment、Both または Free スレッド モデルを使用することをお勧めします。Merge では複数のスレッドでプラグイン コンポーネントのインスタンスを作成する可能性があるので、それぞれのコンポーネントは使用するスレッド モデルに適用される標準スレッド セーフティ ガイドラインに従う必要があります。
エラー処理
Merge ではメソッドやプロパティがエラーになった場合に、標準の OLE ISupportErrorInfo メカニズムを使用してエラー情報を取得します。このメカニズムから提供されるエラー メッセージは通常逐語的に正確にユーザーに表示されるので、最大限有用なものとなります。
プロパティ
Capability
| IDL | [propget] HRESULT Capability([in] Capability nCapability, [in] IUrlCollection* pHintUrls, [out, retval] CapabilityLevel* pValue) |
|---|---|
| .NET | CapabilityLevel get_Capability(Capability nCapability, IUrlCollection pHintUrls) |
| VB6 | Capability(nCapability As Capability, pHintUrls As IUrlCollection) As CapabilityLevel |
ファイル システムによっては、ほかのファイル システムよりも操作の実行が困難であったり速度が遅くなったりすることがあります。Merge ではこのプロパティを使ってプラグインでサポートする特定の機能の範囲、およびその効率を調べます。
このプロパティは 取得のみです。
引数
-
nCapability
プラグインのサポート レベルが必要な特定の機能。
-
pHintUrls
機能と一緒に指定することができるヒント URL のコレクション。これはその機能のサポート レベルを調べるのに役立ちます。
TemporaryFileName
| IDL | [propget] HRESULT TemporaryFileName([in] BSTR strUrl, [out, retval] BSTR* pValue) |
|---|---|
| .NET | String get_TemporaryFileName(String strUrl) |
| VB6 | TemporaryFileName(strUrl As String) As String |
このプロパティは Merge で使用できるファイルの URL を返します。これは strUrl で指定されたファイルの一時的なコピーを保存するためのものです。一時ファイルは strUrl で指定したファイルの近くの場所に置くようにしてください。Merge がファイルを保存するときに記憶領域が不足して保存が失敗すると、一時的なバックアップ
コピーを作成します。保存が失敗した場合には、一時的なバックアップが置かれている場所がユーザーに通知されるので対処することができます。
このプロパティは 取得のみです。
引数
-
strUrl
プラグインのファイル システム内に置かれる既存ファイルへの URL。
メソッド
AppendPathToURL
| IDL | HRESULT AppendPathToURL([in] BSTR strUrl, [in] BSTR strPath, [out, retval] BSTR* pValue) |
|---|---|
| .NET | String AppendPathToURL(String strUrl, String strPath) |
| VB6 | AppendPathToURL(strUrl As String, strPath As String) As String |
このメソッドは strPath を strURL を付け足すことによってファイル システム内の有効な URL を表します。
引数
-
strUrl
パスを付加する URL。
-
strPath
URL に付加するパス。
BindFile
| IDL | HRESULT BindFile([in] BSTR strUrl, [in] VARIANT_BOOL bMustExist, [out, retval] IFile** pValue) |
|---|---|
| .NET | IFile BindFile(String strUrl, Boolean bMustExist) |
| VB6 | BindFile(strUrl As String, bMustExist As Boolean) As IFile |
このメソッドは、プラグインのファイル システム内のファイルを表すオブジェクト用の IFile インターフェイスを返します。
引数
-
strUrl
プラグインのファイル システム内に置かれるファイルの URL。
-
bMustExist
Trueの場合、ファイルが存在する場合にのみ結果が返されます。Falseの場合、結果は常に返されます(つまりファイルの作成が可能です)。
BindFolder
| IDL | HRESULT BindFolder([in] BSTR strUrl, [in] VARIANT_BOOL bMustExist, [out, retval] IFolder** pValue) |
|---|---|
| .NET | IFolder BindFolder(String strUrl, Boolean bMustExist) |
| VB6 | BindFolder(strUrl As String, bMustExist As Boolean) As IFolder |
このメソッドは、プラグインのファイル システム内のフォルダを表すオブジェクト用の IFolder インターフェイスを返します。
引数
-
strUrl
プラグインのファイル システム内に置かれるフォルダの URL。
-
bMustExist
Trueの場合、フォルダが存在する場合にのみ結果が返されます。Falseの場合、結果は常に返されます(つまりフォルダの作成が可能です)。
CopyFile
| IDL | HRESULT CopyFile([in] BSTR strFromUrl, [in] BSTR strToUrl, [in] IContinueOperation* pContinue) |
|---|---|
| .NET | void CopyFile(String strFromUrl, String strToUrl, IContinueOperation pContinue) |
| VB6 | CopyFile(strFromUrl As String, strToUrl As String, pContinue As IContinueOperation) |
このメソッドはプラグインのファイル システム内のファイルをコピーするときに使用します。ソース URL とターゲット URL によって確実にプラグインのファイル システム内のファイルを参照します。 非常に時間がかかるコピー操作の場合、pContinue 引数を使用してその操作を中止するかどうかをチェックします。このメソッドは、エラー時には置き換え不可にしていない限り、既存のターゲット ファイルを置き換えます。
引数
-
strFromUrl
プラグインのファイル システム内に置かれるファイルの URL。
-
strToUrl
プラグインのファイル システム内に置かれるファイルの URL。
-
pContinue
非常に時間がかかるコピー操作中にそのコピー操作を続行するかどうかをチェックできるオブジェクトへの参照。
Delete
| IDL | HRESULT Delete([in] IUrlCollection* pItems, [in] VARIANT_BOOL bNeverPrompt, [in] VARIANT_BOOL bRecursive) |
|---|---|
| .NET | void Delete(IUrlCollection pItems, Boolean bNeverPrompt, Boolean bRecursive) |
| VB6 | Delete(pItems As IUrlCollection, bNeverPrompt As Boolean, bRecursive As Boolean) |
コレクション内の指定の URL を削除します。
引数
-
pItems
削除する URL のコレクション。
-
bNeverPrompt
項目を削除する確認メッセージをユーザーに表示しないかどうか。
-
bRecursive
URL コレクション内のフォルダを再帰的に削除するかどうか。
