Ich arbeite an einer Windows 10 UWP App, die die OneDrive API
in C# verwendet.OneDrive-API Ordner erstellen, wenn nicht vorhanden
Ich versuche, die Id
eines bestimmten Unterordners oder erstellen Sie es, wenn es nicht existiert. So weit sieht es in etwa so aus:
public async Task<string> getOldFolder<IDBEntry>(IDBEntry objectType)
{
try
{
// authenticate
if (!this.oneDriveClient.IsAuthenticated)
{
await this.oneDriveClient.AuthenticateAsync();
}
var children = await oneDriveClient.Drive.Special.AppRoot.Children.Request().Select("name,id").GetAsync(); // get name and id only (dont need the rest)
string retID = string.Empty;
string ID = string.Empty;
if (children != null)
{
foreach (var item in children)
{
var s = item.Name;
if (s == objectType.GetType().Name) // class name, e.g. "classA"
{
ID = item.Id;
}
}
}
// cancel, if nothing found
if (ID == string.Empty)
{
return null;
}
children = await oneDriveClient.Drive.Items[ID].Children.Request().GetAsync();
if (children != null)
{
foreach (var item in children)
{
if (item.Name == "old")
{
retID = item.Id;
}
}
}
if (string.IsNullOrEmpty(retID))
{
// create folder "old"
// this is the part I'm stuck with
string itemPath = objectType.GetType().Name + "/" + "old";
Item item = await oneDriveClient.Drive.Special.AppRoot.ItemWithPath(itemPath).Content.Request().PutAsync
if (item != null && (!string.IsNullOrEmpty(item.Id)))
{
retID = item.Id;
}
}
return retID;
}
catch (Exception)
{
return null;
}
}
Was macht der Code? Ich lege eine Klasse, z.B. ClassA
, dann sieht es in der Special Folder
, wo nur meine App hat Zugriff auf diese ClassA
und sucht nach einem Ordner namens old
. Wenn es existiert, gibt es die Id
des Ordners old
zurück oder es erstellt den Ordner old
und gibt dann Id
zurück.
Wie Sie sehen können, ist mein Ansatz nicht sehr gut aussehend, aber ich weiß nicht, wie man es besser macht, noch es laufen lassen (Erstellen des Ordners ist das Problem hier). Ich könnte eine Null-Datei hochladen und dadurch den Ordner automatisch erstellen und dann wieder entfernen, aber ich möchte es nicht so machen.
Wie kann ich das besser und professioneller angehen? Tahnk Sie sehr viel im Voraus
Hmmm Ich denke, die 'ClassA' Sache ist verwirrender in der Frage, als zu helfen. Wie auch immer, deine Antwort ist, was ich mir erhofft habe. Die Sache mit der Klasse ist, dass ich eine Schnittstelle habe und mehrere Klassen diese Schnittstelle erben. Die Klassen sind Einträge einer Datenbank und ich möchte jeden Eintrag einer Klasse in einen freigegebenen Ordner stellen. Der Name jedes Eintrags bestimmt, ob es beim Synchronisieren neuer oder gleich ist und ich kann ohne das Sync-Delta gehen, was für mich immer noch ziemlich verwirrend ist. – user3079834
@ user3079834, klingt ziemlich kompliziert für mich, wo ist Ihre Datenbank? Ist das nicht in Ordnung, wenn Sie Ihre Datenbankdatei einfach auf OneDrive hochladen? Wie auch immer, wenn Sie ein anderes Problem haben, können Sie hier eine neue Frage stellen. –
Feng: Die Datenbank ist lokal, aber ich möchte mit mehreren Geräten synchronisieren und da der Benutzer Änderungen an der Datenbank vornehmen und/oder Einträge oft hinzufügen, fand ich die db jedes Mal als zu viel in Zeit und Datenverbrauch zu synchronisieren, so Ich entschied mich, jeden Eintrag selbst zu synchronisieren und wenn er geändert wurde, muss ich nur diesen spezifischen Eintrag herunterladen.Hier kommen die Schnittstelle und die Klassen ins Spiel: Jeder Eintrag hat seine eigene eindeutige ID und ein Datum, an dem er zuletzt aktualisiert wurde. Dies kombiniert den Dateinamen auf OneDrive. Wie ich im obigen Beitrag erwähnte, ist das nicht professionell, aber ich denke, funktioniert – user3079834