Uwp OneDrive API创建文件夹(如果不存在)
我正在开发一个Windows10UWP应用程序,它使用c#中的Uwp OneDrive API创建文件夹(如果不存在),uwp,onedrive,Uwp,Onedrive,我正在开发一个Windows10UWP应用程序,它使用c#中的OneDrive API 我正在尝试获取特定子文件夹的Id,如果它不存在,则创建它。到目前为止,它看起来像这样: 公共异步任务getOldFolder(IDBEntry对象类型) { 尝试 { //鉴定 如果(!this.oneDriveClient.IsAuthenticated) { 等待此消息。oneDriveClient.AuthenticateTasync(); } var children=await oneDriveCl
OneDrive API
我正在尝试获取特定子文件夹的Id
,如果它不存在,则创建它。到目前为止,它看起来像这样:
公共异步任务getOldFolder(IDBEntry对象类型)
{
尝试
{
//鉴定
如果(!this.oneDriveClient.IsAuthenticated)
{
等待此消息。oneDriveClient.AuthenticateTasync();
}
var children=await oneDriveClient.Drive.Special.AppRoot.children.Request().Select(“name,id”).GetAsync();//仅获取名称和id(不需要其余的)
string retID=string.Empty;
string ID=string.Empty;
如果(子项!=null)
{
foreach(子项中的变量项)
{
var s=item.Name;
if(s==objectType.GetType().Name)//类名,例如“classA”
{
ID=item.ID;
}
}
}
//如果没有找到,请取消
if(ID==string.Empty)
{
返回null;
}
children=wait oneDriveClient.Drive.Items[ID].children.Request().GetAsync();
如果(子项!=null)
{
foreach(子项中的变量项)
{
如果(item.Name==“旧”)
{
retID=item.Id;
}
}
}
if(string.IsNullOrEmpty(retID))
{
//创建文件夹“旧”
//这是我一直坚持的部分
string itemPath=objectType.GetType().Name+“/”+“old”;
Item Item=等待oneDriveClient.Drive.Special.AppRoot.ItemWithPath(itemPath.Content.Request().PutAsync
if(item!=null&(!string.IsNullOrEmpty(item.Id)))
{
retID=item.Id;
}
}
返回retID;
}
捕获(例外)
{
返回null;
}
}
代码的作用是什么?我放入一个类,例如ClassA
,然后它会在特殊文件夹中查找,其中只有我的应用程序可以访问该ClassA
,并搜索名为old
的文件夹。如果存在,则返回文件夹old
的Id
,或者创建文件夹old
,然后返回Id
正如您所看到的,我的方法不是很好看,但我不知道如何做得更好,也不知道如何让它运行(创建文件夹是这里的问题)。我可以上传一个空文件,从而自动创建文件夹,然后再次删除它,但我不希望这样做
我如何才能更好、更专业地处理这个问题?我事先非常感谢你
我放入一个类,例如ClassA,然后它会出现在特殊文件夹中,只有我的应用程序可以访问这个ClassA并搜索一个名为old的文件夹。如果存在,则返回文件夹old的Id,或者创建文件夹old,然后返回其Id
我看不懂你的ClassA
,你是说你想在你的应用程序的类中做这项工作
无论如何,我在这里写了一个示例,它可以在OneDrive
中获取我的应用程序文件夹,并查找其中是否有名为“old”的子文件夹,如果有,返回此文件夹的ID,如果没有,创建一个并返回此新文件夹的ID
私有字符串ID;
专用异步无效按钮\u单击(对象发送方,路由目标)
{
尝试
{
var appfolderitems=await GetAppRoot();
Dictionary itemList=新建字典();
foreach(appfolderitems中的变量项)
{
var id=item.id;
var name=item.name;
itemList.Add(id,name);
}
if(itemList.ContainsValue(“旧”))
{
foreach(itemList中的变量项)
{
如果(item.Value==“旧”)
ID=项。键;
}
}
其他的
{
ID=等待CreateFolder();
}
}
捕获(例外情况除外)
{
投掷;
}
}
私人客户机;
私有异步任务GetAppRoot()
{
驱动客户端=
等待OneDriveClientExtensions.GetAuthenticatedUniversalClient(
新字符串[]{“onedrive.readwrite”,“offline_access”}
);
如果(!driveClient.IsAuthenticated)返回null;
var itemRequest=await driveClient.Drive.Special.AppRoot.Children.Request().GetAsync();
返回项目请求;
}
专用异步任务CreateFolder()
{
如果(!driveClient.IsAuthenticated)返回null;
var folderToCreate=new Item{Name=“old”,Folder=new Folder()};
var oldfolder=await driveClient.Drive.Special.AppRoot.Children.Request().AddAsync(folderToCreate);
返回oldfolder.Id;
}
正如您在这里看到的,我将获取ID的代码放在按钮单击事件中,如果您想在类中访问它,可以尝试将此代码放在类的构造函数中
顺便说一句,我在这里没有使用搜索和过滤Api来查找文件夹,我的目的是区分名为“old”的文件夹和名为“old”的文件,例如“old.txt”,默认情况下,如果搜索“old”,也会将“old.txt”添加到结果中。目前我还没有找到使用Q
filter来搜索特定类型的方法,您可以试试 嗯,我认为ClassA
这件事在这个问题上比帮助更让人困惑。不管怎样,你的答案是,我所希望的。这个类的问题是,我有一个接口,多个类继承这个接口。这些类是数据库的条目,我想将每个类条目放入一个共享文件夹中。每个条目的名称决定了同步时它是新的还是相同的,我可以不使用同步增量,这对我来说仍然很混乱。@user3079834,听起来很复杂,你的数据库在哪里?如果您只是将数据库文件上载到OneDrive,这不正常吗?无论如何,如果你有任何其他问题,欢迎在这里问一个新问题。冯:数据库是本地的,但我想同步到多个设备,因为用户将进行更改