Frage

Ich arbeite an einer Metro-App, die den Inhalt eines bestimmten Ordners in einem ListView-Steuerelement anzeigt.MS entschied, dass Entwickler die Klasse System.IO.Directory nicht benötigen und entfernte sie vollständig aus dem Framework.

Ich suche nach einem Ersatz zum Aufzählen von Dateien in C# in einer App im Metro-Stil.Ich habe alle von MS bereitgestellten Aufzählungsbeispiele überprüft und sie scheinen alle nur die Windows-Bibliotheken aufzulisten, die das verwenden KnownFolders Klasse, so etwas wie:

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

und das Aufrufen des GetFilesAsync() oder GetFoldersAsync() Methoden je nach Bedarf.Das ist alles Gold, wenn ich nur die Bilder- oder Musikbibliothek aufzählen wollte.Ich möchte jedoch Dateien in Verzeichnissen auflisten, die nicht in einer Bibliothek enthalten sind.

Weiß jemand, wie das in WinRT möglich ist???

War es hilfreich?

Lösung

In diesem Bereich sind Sie bei Metro-Apps konstruktionsbedingt stark eingeschränkt.Die Idee dahinter ist, dass einer Metro-App nur Zugriff auf die Dinge gewährt wird, auf die sie vertrauenswürdig ist. Sie können also entweder:

  1. Zugriff auf lokalen Speicher, speziell für Ihre Anwendung
  2. auf eine Handvoll bekannter Speicherorte zugreifen, oder
  3. Zugriff auf einen speziell zugewiesenen Standort.

Schauen Sie mal rein http://msdn.microsoft.com/en-us/library/windows/apps/hh464959.aspx um eine Vorstellung davon zu bekommen, worauf Sie zugreifen können.

Andere Tipps

Aus http://tirania.org/blog/archive/2011/Sep-15.html :

Wenn Sie C# und VB verwenden, verwenden Sie das vollständige .NET-Framework.Sie haben sich jedoch entschieden, eine kleinere Teilmenge der API Entwicklern zur Verfügung zu stellen, um die neue Vision für Windows 8 voranzutreiben.

Und diese neue Vision umfasst Sicherheits-/Sandbox -Systeme und asynchrone Programme.Aus diesem Grund erhalten Sie keinen Zugriff auf Direktdateisysteme oder Socket -Zugriff und warum synchrone APIs, die Sie für den Verzehr gewohnt waren, nicht freigelegt werden.

Nun fällt Ihnen auf, dass ich „entblößt“ und nicht „weg“ gesagt habe.

Was sie taten, war, dass sie dem Compiler nur einen APIs ausgesetzt waren, wenn Sie auf das Metro -Profil abzielen.Daher wird Ihre Bewerbung beispielsweise nicht versehentlich Datei anrufen.Zur Laufzeit lädt die CLR die vollständige Klassenbibliothek, die genau die Datei enthält.

Diese Spaltung ähnelt dem, was in der Vergangenheit mit Silverlight getan wurde, wo nicht jede API ausgesetzt war und bei der MSCORLIB Rechte erhielt, dass Ihre Bewerbung nicht die Sicherheit der Systemssicherheit gewährleisten musste.

Möglicherweise denken Sie, dass Sie einen Trick verwenden können (Verweis auf die GAC -Bibliothek anstelle der Compiler -Referenz oder Reflexion, um private APIs zu erreichen oder in Win32 aufzurufen).Alle diese Verwendungen werden jedoch von AppStore Review -Anwendung erfasst und Sie können Ihre App nicht über den Microsoft -Store veröffentlichen.

Sie können immer noch jeden beliebigen hässlichen Hack auf Ihrem System ausführen.Es wird nur nicht möglich sein, dies über den AppStore zu veröffentlichen.

Es gibt also wahrscheinlich keinen offiziellen Weg, und wenn es einen inoffiziellen Weg gibt, wird er wahrscheinlich nicht im App Store akzeptiert.

Generell macht das Sinn:Ich möchte keine scheinbar legitime Anwendung herunterladen, nur damit sie meine Festplatte scannt und meine Tabelle „budget.xls“ findet, die meine Bank-/Kreditinformationen enthält.

BEARBEITEN:Es ist möglich, über die Dateiauswahl von WinRT temporären Zugriff auf sichere Dateien/Ordner zu gewähren, dies muss jedoch vom Benutzer explizit aufgerufen und ausgewählt werden.

Du kannst den ... benutzen StorageFolder.GetFolderFromPathAsync Methode, um eine zu erhalten Speicherordner Instanz aus einem Pfad.

StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"C:\...");

Beachten Sie jedoch, dass Sie möglicherweise nicht für alle Pfade auf Ihrem Computer die Berechtigung dazu haben.

Ähnliche Situation.Wollte zum Parsen auf die Chrome-Lesezeichendatei zugreifen.Musste anfangs FileOpenPicker verwenden, aber die zurückgegebene Datei kann für den späteren Abruf in der Futureaccesslist(?) „zwischengespeichert“ werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top