Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Uwp OneDrive API创建文件夹(如果不存在)_Uwp_Onedrive - Fatal编程技术网

Uwp OneDrive API创建文件夹(如果不存在)

Uwp OneDrive API创建文件夹(如果不存在),uwp,onedrive,Uwp,Onedrive,我正在开发一个Windows10UWP应用程序,它使用c#中的OneDrive API 我正在尝试获取特定子文件夹的Id,如果它不存在,则创建它。到目前为止,它看起来像这样: 公共异步任务getOldFolder(IDBEntry对象类型) { 尝试 { //鉴定 如果(!this.oneDriveClient.IsAuthenticated) { 等待此消息。oneDriveClient.AuthenticateTasync(); } var children=await oneDriveCl

我正在开发一个Windows10UWP应用程序,它使用c#中的
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,这不正常吗?无论如何,如果你有任何其他问题,欢迎在这里问一个新问题。冯:数据库是本地的,但我想同步到多个设备,因为用户将进行更改