Я работаю над приложением Windows 10 UWP, которое использует OneDrive API
в C#.OneDrive-API создайте папку, если она не существует
Я пытаюсь получить Id
конкретной подпапки или создать ее, если она не существует. До сих пор это выглядит примерно так:
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;
}
}
Что делает код? Я помещаю класс, например. ClassA
, то он выглядит в Special Folder
, где только мое приложение имеет доступ для этого ClassA
и ищет папку под названием old
. Если он существует, он возвращает Id
из папки old
или создает папку old
, а затем возвращает ее Id
.
Как вы можете видеть, мой подход не очень приятный, но я не знаю, как это сделать лучше, и не запускайте его (создание папки - проблема здесь). Я мог бы загрузить нулевой файл и тем самым создать папку автоматически, а затем удалить ее снова, но я не хочу этого делать.
Как я могу подойти к этому лучше и профессиональнее? Tahnk вы очень заблаговременно
Хммм Я думаю, что вещь 'ClassA' более запутанна в вопросе, чем помогает. Во всяком случае, ваш ответ - то, на что я надеялся. Вещь с классом заключается в том, что у меня есть интерфейс и несколько классов наследуют этот интерфейс. Классы - это записи в базе данных, и я хочу поместить каждую запись класса в общую папку. Имя каждой записи определяет, если она более новая или то же самое во время синхронизации, и я могу обойтись без дельта-синхронизации, которая для меня все еще довольно запутанна. – user3079834
@ user3079834, звучит довольно сложно для меня, где ваша база данных? Разве это не нормально, если вы просто загрузите файл базы данных на OneDrive? В любом случае, если у вас есть другие проблемы, можете задать здесь новый вопрос. –
Feng: база данных локально, но я хочу синхронизировать с несколькими устройствами, и поскольку пользователь будет вносить изменения в базу данных и/или добавлять записи довольно часто, я обнаружил, что каждый раз синхронизировал db как слишком много времени и использования данных, поэтому Я решил скорее синхронизировать каждую запись, и когда она изменилась, мне просто нужно загрузить эту конкретную запись.вот где интерфейс и классы входят в игру: каждая запись имеет свой собственный уникальный идентификатор и дату и время последнего обновления. Это объединение делает имя файла на OneDrive. Как я упоминал выше, это не профессионально, но я думаю, что работает – user3079834