我在Visual Studio中使用Windows Universal Platform Tools创建了一个应用程序。在这个应用程序中,我必须重命名用户选择的文件,但我在调试时收到Permission denied异常。
包装后&在机器上安装我没有选择以管理员身份运行它。
我尽可能多地搜索,但似乎互联网上似乎没有任何解决方案,或者我错过了任何可能解决此问题的查询。
我无法在清单文件中看到与存储相关的任何类型的权限:(
代码: (编辑:现在正在使用Code)
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验证每个&amp;一切都按照我的预期进行,如果我不使用File.Copy,那么每个文件都会从我想要的所选文件夹中列出。但是使用File.Copy获取Permission Denied问题:(如果我直接使用File.Move,我将获得File Not Found Exception。
解决此类问题的方法是什么?
答案 0 :(得分:3)
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++;
}