次の方法で共有


プレースホルダー ファイル

プラットフォーム

クライアント - Windows 8.1 サーバー - Windows Server 2012 R2

説明

プレースホルダー ファイルを使用すると、接続に関係なく、ユーザーは Microsoft OneDrive ファイルを表示および管理できます。 プレースホルダー ファイルは、ファイルがローカルにキャッシュされていない場合でも、OneDrive 名前空間を表します。 ファイルメタデータと写真のサムネイル画像が含まれています。

症状

エンド ユーザーと開発者は、プレースホルダー ファイルの外観と動作はローカル ファイルとほぼ同じです。

アプリで [共通ファイル] ダイアログを使用してファイル システムを列挙した場合、アプリは影響を受けません。 ユーザーが共通の /file ダイアログからファイルを開こうとすると、ファイルの内容がダウンロードされ、アプリに渡されます。

アプリがファイル システムに直接アクセスする場合、アプリは次のガイドラインを使用してプレースホルダー ファイルを利用できます。

解決策

  • プレースホルダーは、属性に基づく規則によって非表示になります
  • 再解析タグ ID IO_REPARSE_TAG_FILE_PLACEHOLDERを使用してプレースホルダーを識別する

シームレスな動作にはシェル データ モデルを使用します。

  • SHCreateItemFromParsingName() を使用してシェル項目を作成する
  • IShellItem::BindToHandler(BHID_Stream) を使用してストリームにバインドする
  • プロパティ アクセスのユーザー プロパティ ハンドラー (IShellItem2::GetPropertyHandler)
  • プレースホルダーのサムネイル画像を取得するユーザー シェル thumbnailhandler
  • 動詞が BindToHandler を介してストリームにバインドする場合は、動詞の実装で SupportedProtocols=* を指定します
#include <winnth> //for IO_REPARSE_TAG_FILE_PLACEHOLDER
//  Helper that indicates this is a 
bool IsFilePlaceholder(WIN32_FIND_DATA const &amp;findData)
{
  return (findData.dwFileAttributes &amp; FILE_ATTRIBUTE_REPARSE_POINT) &amp;&amp;
    (findData.dwReserved0 == IO_REPARSE_TAG_FILE_PLACEHOLDER);
}
bool IsFilePlaceholder(_In_PCWSTR filePath)
{
  bool isPlaceholder = false;
  WIN32_FIND_DATA findData;
  HANDLE hFind = FindFirstFile(filePath, &amp;findData);
  if (hFind ! = INVALID_HANDLE_VALUE)
  {
    isPlaceholder = (findData.dwFileAttributes &amp;    FILE_ATTRIBUTE_REPARSE_POINT) &amp;&amp;
    (findData.dwReserved0 == IO_REPARSE_TAG_FILE_PLACEHOLDER);
    FindClose(hFind);
  }
  Return isPlaceholder;
}