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 エントリ ポイントを使用して登録され、作成操作を再試行します。このキーの値は、Merge インストール フォルダーに対するプラグイン DLL の場所を指定します。 |
このインターフェイスを実装するコンポーネントは、通常 IFileSystemInit も同様に実装します。
スレッド モデル
仮想ファイル システム コンポーネント サーバーは、インプロセス サーバーとしてまたはローカル サーバーとして実装することができます。パフォーマンスの観点から、サーバーはインプロセスとして、Apartment、Both または Free スレッド モデルを使用することをお勧めします。Merge では複数のスレッドでプラグイン コンポーネントのインスタンスを作成する可能性があるので、それぞれのコンポーネントは使用するスレッド モデルに適用される標準スレッド セーフティ ガイドラインに従う必要があります。
エラー処理
Merge ではメソッドやプロパティがエラーになった場合に、標準の OLE ISupportErrorInfo メカニズムを使用してエラー情報を取得します。このメカニズムから提供されるエラー メッセージは通常逐語的に正確にユーザーに表示されるので、最大限有用なものとなります。
プロパティ
Capability読み取り専用IFileSystem
ファイル システムによっては、ほかのファイル システムよりも操作の実行が困難であったり速度が遅くなったりすることがあります。Merge ではこのプロパティを使って、プラグインによって特定の機能がサポートされる範囲、およびその効率を調べます。
IDL |
[propget] HRESULT Capability(
|
---|---|
.NET | CapabilityLevel
get_Capability( |
nCapability
プラグインのサポート レベルを求める特定の機能。pHintUrls
機能と一緒に指定することができるヒント URL のコレクション。これは、その機能のサポート レベルを調べるのに役立ちます。
TemporaryFileName読み取り専用IFileSystem
このプロパティはファイルの URL を返します。このファイルは、strUrl
で指定されたファイルの一時コピーを格納するために使用されます。一時ファイルは strUrl で指定したファイルの近くの場所に置くようにしてください。Merge はファイルを上書きするときに記憶領域が不十分で保存に失敗すると、一時的なバックアップ コピーを作成します。保存が失敗した場合には、問題を解決できるよう、一時的なバックアップが置かれている場所がユーザーに通知されます。
IDL |
[propget] HRESULT TemporaryFileName(
|
---|---|
.NET | String
get_TemporaryFileName( |
strUrl
プラグインのファイル システム内に置かれている既存ファイルへの URL。
メソッド
AppendPathToURLIFileSystem
このメソッドは strPath
を strURL
に付け足すことによって、ファイル システム内の有効な URL を表します。
IDL |
HRESULT AppendPathToURL(
|
---|---|
.NET | String AppendPathToURL( |
strUrl
パスを付加する URL。strPath
URL に付加するパス。
BindFileIFileSystem
このメソッドは、プラグインのファイル システム内にあるファイルを表すオブジェクトの IFile インターフェイスを返します。
IDL |
HRESULT BindFile(
|
---|---|
.NET | IFile BindFile( |
strUrl
プラグインのファイル システム内に置かれているファイルの URL。bMustExist
True
の場合、結果はファイルが存在する場合にのみ返されます。False
の場合、結果は常に返されます(つまりファイルの作成が可能です)。
BindFolderIFileSystem
このメソッドは、プラグインのファイル システム内にあるフォルダーを表すオブジェクトの IFolder インターフェイスを返します。
IDL |
HRESULT BindFolder(
|
---|---|
.NET | IFolder BindFolder( |
strUrl
プラグインのファイル システム内に置かれているフォルダーの URL。bMustExist
True
の場合、結果はフォルダーが存在する場合にのみ返されます。False
の場合、結果は常に返されます(つまりフォルダーの作成が可能です)。
CopyFileIFileSystem
このメソッドは、プラグインのファイル システム内のファイルをコピーするときに使用します。ソース URL とターゲット URL によって確実にプラグインのファイル システム内のファイルを参照します。非常に時間がかかるコピー操作の場合、pContinue
引数を使用してその操作を中止するかどうかをチェックします。このメソッドは、エラーによって置換できないようにしていない限り、既存のターゲット ファイルを置き換えます。
IDL |
HRESULT CopyFile(
|
---|---|
.NET | void CopyFile( |
strFromUrl
プラグインのファイル システム内に置かれているファイルの URL。strToUrl
プラグインのファイル システム内に置かれているファイルの URL。pContinue
非常に時間がかかるコピー操作中に、そのコピー操作を続行するかどうかをチェックできるオブジェクトへの参照。
DeleteIFileSystem
コレクション内の指定の URL を削除します。
IDL |
HRESULT Delete(
|
---|---|
.NET | void Delete( |
pItems
削除する URL のコレクション。bNeverPrompt
項目を削除する確認メッセージをユーザーに表示しないかどうか。bRecursive
URL コレクション内のフォルダーを再帰的に削除するかどうか。