Platzhalterdateien

Plattform

Clients – Windows 8.1
Server – Windows Server 2012 R2

BESCHREIBUNG

Platzhalterdateien ermöglichen Es Benutzern, Microsoft OneDrive Dateien unabhängig von der Konnektivität anzuzeigen und zu verwalten. Platzhalterdateien stellen den OneDrive Namespace dar, auch wenn Dateien nicht lokal zwischengespeichert werden. Sie enthalten Dateimetadaten und Miniaturbilder von Fotos.

Manifestation

Für Endbenutzer und Entwickler sehen Platzhalterdateien fast genauso aus und verhalten sich wie die lokalen Dateien.

Wenn Ihre App das Dialogfeld "Allgemeine Datei" verwendet, um das Dateisystem aufzuzählen, ist Ihre App nicht betroffen. Wenn der Benutzer versucht, die Datei über das allgemeine Dialogfeld /file zu öffnen, wird der Dateiinhalt heruntergeladen und an Ihre App übergeben.

Wenn Ihre App direkt auf das Dateisystem zugreift, kann Ihre App die Platzhalterdateien anhand der folgenden Richtlinien nutzen.

Lösung

  • Platzhalter werden basierend auf Attributen konventionsbasiert ausgeblendet.
  • Identifizieren von Platzhaltern mithilfe der ID des Wiederholungstags IO _ REPARSE _ TAG _ FILE _ PLACEHOLDER

Verwenden Sie das Shelldatenmodell für nahtloses Verhalten:

  • Verwenden von SHCreateItemFromParsingName() zum Erstellen eines Shellelements
  • Binden an den Stream mithilfe von IShellItem::BindToHandler(LDAPID _ Stream)
  • Benutzereigenschaftenhandler für den Eigenschaftenzugriff (IShellItem2::GetPropertyHandler)
  • User Shell thumbnailhandler to get thumbnail images for placeholders (Benutzershellminiaturhandler zum Abrufen von Miniaturbildern für Platzhalter)
  • Geben Sie SupportedProtocols= * für Ihre Verbimplementierungen an, wenn das Verb über BindToHandler an den Stream gebunden wird.
#include <winnth> //for IO_REPARSE_TAG_FILE_PLACEHOLDER
//  Helper that indicates this is a 
bool IsFilePlaceholder(WIN32_FIND_DATA const &findData)
{
  return (findData.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) &&
    (findData.dwReserved0 == IO_REPARSE_TAG_FILE_PLACEHOLDER);
}
bool IsFilePlaceholder(_In_PCWSTR filePath)
{
  bool isPlaceholder = false;
  WIN32_FIND_DATA findData;
  HANDLE hFind = FindFirstFile(filePath, &findData);
  if (hFind ! = INVALID_HANDLE_VALUE)
  {
    isPlaceholder = (findData.dwFileAttributes &    FILE_ATTRIBUTE_REPARSE_POINT) &&
    (findData.dwReserved0 == IO_REPARSE_TAG_FILE_PLACEHOLDER);
    FindClose(hFind);
  }
  Return isPlaceholder;
}