私はWindows 10 UWPアプリケーションで作業しています。これは、C#でOneDrive API
を使用しています。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
というフォルダを検索します。存在する場合は、old
のId
を返します。または、old
というフォルダを作成してId
を返します。
私のアプローチは見栄えが良くありませんが、わかりません。どのように改善するか、それを実行する(フォルダを作成することが問題です)。ヌルファイルをアップロードしてフォルダを自動的に作成してから削除することもできますが、そのようにしたくはありません。
私はこれをよりよく、より専門的にアプローチすることができますか? Tahnkは大変お手数です。
Hmmm「ClassA」のことは、困っているよりも、混乱していると思います。とにかく、あなたの答えは、私が望んでいたものです。クラスのことは、私にはインターフェースがあり、複数のクラスがこのインターフェースを継承しているということです。クラスはデータベースのエントリであり、クラスの各エントリを共有フォルダに入れたいと思います。同期している間にそれが新しいか同じであるかどうかは、各エントリの名前が決定します。同期デルタを使わずに行くことができますが、これはまだかなり混乱しています。 – user3079834
@ user3079834、あなたのデータベースはどこですか? OneDriveにデータベースファイルをアップロードしても問題ありませんか?いずれにしても、他の問題があれば、ここで新しい質問をすることを歓迎します。 –
Feng:データベースはローカルですが、複数のデバイスに同期したいのですが、ユーザーがデータベースを変更したり、エントリを頻繁に追加したりすると、毎回dbを時間とデータの使用量が多すぎると同期させる私はむしろ各エントリ自体を同期することを選択し、変更されたときには、その特定のエントリをダウンロードするだけです。それはインターフェイスとクラスが出現するところです:各エントリーには独自のIDと最後に更新された日時があります。これにより、OneDrive上にファイル名が作成されます。上の記事で触れたように、これは専門的なことではありませんが、 – user3079834