IFileSystem インターフェイス

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(
    [in] Capability nCapability,
    [in] IUrlCollection* pHintUrls,
    [out, retval] CapabilityLevel* pValue)
.NET CapabilityLevel get_Capability(
    Capability nCapability,
    IUrlCollection pHintUrls)
  • nCapability
    プラグインのサポート レベルを求める特定の機能。
  • pHintUrls
    機能と一緒に指定することができるヒント URL のコレクション。これは、その機能のサポート レベルを調べるのに役立ちます。

TemporaryFileName読み取り専用IFileSystem

このプロパティはファイルの URL を返します。このファイルは、strUrl で指定されたファイルの一時コピーを格納するために使用されます。一時ファイルは strUrl で指定したファイルの近くの場所に置くようにしてください。Merge はファイルを上書きするときに記憶領域が不十分で保存に失敗すると、一時的なバックアップ コピーを作成します。保存が失敗した場合には、問題を解決できるよう、一時的なバックアップが置かれている場所がユーザーに通知されます。

IDL [propget] HRESULT TemporaryFileName(
    [in] BSTR strUrl,
    [out, retval] BSTR* pValue)
.NET String get_TemporaryFileName(
    String strUrl)
  • strUrl
    プラグインのファイル システム内に置かれている既存ファイルへの URL。

メソッド

AppendPathToURLIFileSystem

このメソッドは strPathstrURL に付け足すことによって、ファイル システム内の有効な URL を表します。

IDL HRESULT AppendPathToURL(
    [in] BSTR strUrl,
    [in] BSTR strPath,
    [out, retval] BSTR* pValue)
.NET String AppendPathToURL(
    String strUrl,
    String strPath)
  • strUrl
    パスを付加する URL。
  • strPath
    URL に付加するパス。

BindFileIFileSystem

このメソッドは、プラグインのファイル システム内にあるファイルを表すオブジェクトの IFile インターフェイスを返します。

IDL HRESULT BindFile(
    [in] BSTR strUrl,
    [in] VARIANT_BOOL bMustExist,
    [out, retval] IFile** pValue)
.NET IFile BindFile(
    String strUrl,
    Boolean bMustExist)
  • strUrl
    プラグインのファイル システム内に置かれているファイルの URL。
  • bMustExist
    True の場合、結果はファイルが存在する場合にのみ返されます。False の場合、結果は常に返されます(つまりファイルの作成が可能です)。

BindFolderIFileSystem

このメソッドは、プラグインのファイル システム内にあるフォルダーを表すオブジェクトの IFolder インターフェイスを返します。

IDL HRESULT BindFolder(
    [in] BSTR strUrl,
    [in] VARIANT_BOOL bMustExist,
    [out, retval] IFolder** pValue)
.NET IFolder BindFolder(
    String strUrl,
    Boolean bMustExist)
  • strUrl
    プラグインのファイル システム内に置かれているフォルダーの URL。
  • bMustExist
    True の場合、結果はフォルダーが存在する場合にのみ返されます。False の場合、結果は常に返されます(つまりフォルダーの作成が可能です)。

CopyFileIFileSystem

このメソッドは、プラグインのファイル システム内のファイルをコピーするときに使用します。ソース URL とターゲット URL によって確実にプラグインのファイル システム内のファイルを参照します。非常に時間がかかるコピー操作の場合、pContinue 引数を使用してその操作を中止するかどうかをチェックします。このメソッドは、エラーによって置換できないようにしていない限り、既存のターゲット ファイルを置き換えます。

IDL HRESULT CopyFile(
    [in] BSTR strFromUrl,
    [in] BSTR strToUrl,
    [in] IContinueOperation* pContinue)
.NET void CopyFile(
    String strFromUrl,
    String strToUrl,
    IContinueOperation pContinue)
  • strFromUrl
    プラグインのファイル システム内に置かれているファイルの URL。
  • strToUrl
    プラグインのファイル システム内に置かれているファイルの URL。
  • pContinue
    非常に時間がかかるコピー操作中に、そのコピー操作を続行するかどうかをチェックできるオブジェクトへの参照。

DeleteIFileSystem

コレクション内の指定の URL を削除します。

IDL HRESULT Delete(
    [in] IUrlCollection* pItems,
    [in] VARIANT_BOOL bNeverPrompt,
    [in] VARIANT_BOOL bRecursive)
.NET void Delete(
    IUrlCollection pItems,
    Boolean bNeverPrompt,
    Boolean bRecursive)
  • pItems
    削除する URL のコレクション。
  • bNeverPrompt
    項目を削除する確認メッセージをユーザーに表示しないかどうか。
  • bRecursive
    URL コレクション内のフォルダーを再帰的に削除するかどうか。