我已经在Visual Studio中使用Windows通用平台工具创建了一个应用程序.在此应用程序中,我必须重命名用户选择的文件,但是在调试时出现“权限被拒绝”异常.
包装后&在计算机上安装我没有选择以管理员身份运行它.
我已进行了尽可能多的搜索,但互联网上似乎没有任何可用的解决方案,或者我错过了可能解决此问题的任何查询.
我在清单文件中看不到与存储相关的任何类型的权限:(
码:
(编辑:这是现在的工作代码)
FolderPicker folderPicker = new FolderPicker();
folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add("*");
folderPicker.ViewMode = PickerViewMode.List;
StorageFolder folderPicked = await folderPicker.PickSingleFolderAsync();
if (folderPicked != null)
{
t_output.Text = folderPicked.Path.ToString();
StringBuilder outputText = new StringBuilder();
IReadOnlyList<StorageFile> fileList =
await folderPicked.GetFilesAsync();
int i=0;
foreach (StorageFile file in fileList)
{
outputText.Append(file.Name + "\n");
StorageFile fs = await folderPicked.GetFileAsync(file.Name);
await fs.RenameAsync("tanitani0" + i + ".jpg");
i++;
}
我正在使用t_output.Text TextBox来验证每个&一切都按我的预期进行,如果我不使用File.Copy,那么每个文件都会从所选文件夹中列出,就像我想要的那样.但是File.Copy :(如果我直接使用File.Move,则会出现权限被拒绝的问题,那么我将获得File Not Found Exception.
解决这类问题的方法是什么?
解决方法:
UWP中有一些文件系统限制,您遇到了其中之一.通过访问该文件夹,您必须继续使用该StorageFolder实例进行修改.
要创建文件的副本,请使用folderPicked.CreateFileAsync(path)并使用从该方法返回的StorageFile复制流数据.但是,由于您可以访问目录中的各个文件,因此可以利用StorageFile接口并异步执行操作.以下是允许的方法列表:
https://docs.microsoft.com/en-us/uwp/api/windows.storage.storagefile
使用File.Copy(…)仅在隔离的存储/应用程序数据目录中有效.仅仅因为您具有folderPicked,并不意味着File.Copy(…)有权访问.
代码示例:
foreach (StorageFile file in fileList)
{
outputText.Append(file.Name + "\n");
int i = 0;
await file.CopyAsync(pickedFolder, "tani" + i + ".jpg");
i++;
}
附带一提,您的int i值将始终为零.只要确保它在循环之外即可继续增加.
int i = 0;
foreach (StorageFile file in fileList)
{
outputText.Append(file.Name + "\n");
await file.CopyAsync(pickedFolder, "tani" + i + ".jpg");
i++;
}