在Windows 10通用应用程序(UWP)中创建新目录

4

我试图使用以下方法创建一个目录,在应用程序中按下按钮后触发它,并向其中添加文件:

DirectoryInfo d = new DirectoryInfo(@"..\\newFolder\\");
FileInfo f = new FileInfo(@"..\\newFolder\\foo.txt");
if (!d.Exists)
{
    d.Create();
}
if (!f.Exists)
{
    f.Create().Dispose();
}

以下是我在进行这个操作时在我的通用应用程序中遇到的错误信息:
An exception of type 'System.UnauthorizedAccessException' 
occurred in System.IO.FileSystem.dll but was not handled in user code

Additional information: Access to the path
 'C:\Users\[username]\Documents\MyApp\bin\x86\Debug\AppX\newFolder' is denied.

有谁熟悉这个错误或者有什么建议吗?

编辑 除了以下内容,这是一个在Windows 10通用应用程序环境中处理文件系统的好资源:文件访问和权限(Windows运行时应用程序)https://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh758325.aspx


如果您使用@"..."语法,则无需转义反斜杠。 @"..\newFolder\"即可。 - theB
4个回答

4

问题在于你试图在应用程序的安装文件夹内创建文件,而通用应用程序不允许这样做。你只能在本地数据文件夹内创建文件夹。

尝试以下方法:

using Windows.Storage;

var localRoot = ApplicationData.Current.LocalFolder.Path;
DirectoryInfo d = new DirectoryInfo(localRoot + "\\test");
if (!d.Exists)
  d.Create();

1
尝试这个。
public static async void  WriteTrace()
{
  StorageFolder localFolder = ApplicationData.Current.LocalFolder;
  StorageFolder LogFolder = await localFolder.CreateFolderAsync("LogFiles", CreationCollisionOption.OpenIfExists);
 }

0

以管理员权限运行您的应用程序,问题就会解决。


1
这很少是最佳解决方案。 - crashmstr
1
在这种情况下,它也没有帮助。 - Peter Torr - MSFT

0

每个应用程序都在特定的用户下运行,并继承其权限、权限、限制等...

因此,您的应用程序运行的用户没有足够的权限,无法创建文件夹。

所以你可以:

  • 使用模拟(搜索模拟c#),并编写您的应用程序以作为具有所需权限(如管理员)的另一个用户运行。之后,您的应用程序将自动作为管理员(或特定用户)运行。(如果您将应用程序模拟为管理员,请注意安全问题)
  • 手动以管理员身份(或具有足够权限的用户)运行您的应用程序。(对于管理员,请右键单击您的应用程序.exe,然后单击“以...方式运行”)
  • 更改工作目录的安全设置和访问限制(例如C:\Users[username]\Documents\MyApp\bin\x86\Debug\AppX\newFolder),并授予您的用户名写入权限

请不要使用评论来表示感谢。 如果你发现了有用的答案(解决了你的问题),请将其标记为“已接受”。 - MrRolling
1
这是一个通用的Windows应用程序,NT用户权限与其无关。这失败是因为它试图写入自己的安装文件夹,而这是不允许的。 - Peter Torr - MSFT
@PeterTorr-MSFT 是的,我同意,这是一个通用应用程序,必须位于普通文件夹中进行定位和执行(具有常规权限)。在这种情况下,他的应用程序在上述提到的文件夹中运行,并且该文件夹位于“用户”和“文档”目录中。通常,个人目录,如“用户”和“文档”,具有有限的权限(出于安全考虑)。因此,我建议他将写入访问权限添加到他的工作目录中。 - MrRolling
1
如果应用程序在商店发布,那么这并没有什么帮助。 - Peter Torr - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接