2012-07-25 3 views
7

ich eine Dateiliste erhalten mit:die Suche nach einem Pfad zu einer Datei gegeben ist es ID

String q = "title contains '"+query+"' and trashed = false"; 
    FileList list = drive.files().list().setQ(q).execute(); 

Ich mag einen Pfad zu jeder passenden Datei in der Dateiliste zu finden.

Ich verstehe, dass die gleiche Datei in mehreren Ordnern angezeigt werden kann.

Von dem, was ich gefunden habe, ist der einzige Weg, um einen Pfad für eine Datei erstellen wird wiederholt aufrufen:

drive.files().get(id).execute() 

und dann eine ID wählen Sie aus, dass die Eltern-Liste der Datei, den Baum, bis der Fuß nach oben Wurzel ist erreicht.

Während der Navigation durch den Baum kann ich einfach das erste Elternteil auswählen oder ein "BFS" ​​machen, bis ich die Wurzel gefunden habe.

Ist dies wirklich die einzige Möglichkeit, einen Pfad zu einer Datei zu finden, oder habe ich einen Teil der API verpasst?

Wenn dies der einzige Weg ist, können Ordner auch mehrere Eltern haben, wodurch Zyklen möglich sind?

(/ a/b/c =>/a/b/c/b/c/b/c ... wenn b hat Eltern a & c)?

Antwort

4

Da Ordner (die einfach spezielle Laufwerksdatei mit einem bestimmten MIME-Typ sind) mehrere Eltern haben kann, würde ich den BFS-Ansatz empfehlen und dafür sorgen, dass Sie mit Schleifen umgehen.

Als Stoppbedingung können Sie die ID des Stammordners speichern, die Sie aus dem Attribut about.rootFolderId abrufen können.

+0

Hat die Elternreferenz ein Titelfeld? Letztendlich muss ich mit einer Liste von Pfadelementen enden, nicht mit Datei-IDs. –

+0

Ich sehe, in diesem Fall können Sie drive.parents.list nicht verwenden. Ich aktualisiere die Antwort, um das zu reflektieren. – Alain

+0

Alain, weißt du, ob es notwendig ist, about.rootFolderId zu verwenden, oder reicht eine leere Elternliste aus? Wenn about.rootFolderId erforderlich ist, kann sich dies innerhalb eines Kontos ändern oder kann ich es dauerhaft zwischenspeichern? –

Verwandte Themen