我有一个UWP C#应用程序,带有一个单元测试项目。在这些单元测试中,我希望能够写入文本文件,以便制作类似snapshots in Jest的内容。
Directory.GetCurrentDirectory()
返回C:\path\to\project\bin\x64\Debug\AppX
,因此我在项目目录中创建了一个文件夹,然后导航到该文件夹,然后尝试在那里创建文件。
[TestMethod]
public void Test()
{
var folder = Path.Combine(Directory.GetCurrentDirectory(), "../../../../Snapshots");
string data = "example data";
string filename = Path.Combine(folder, "Test.snap");
File.WriteAllText(filename, json);
}
但是,此测试会生成System.UnauthorizedAccessException
。我进入了Windows中的文件夹并给了Everyone读/写权限,但这并没有任何区别。
我不想以管理员身份运行Visual Studio。这可能吗?
答案 0 :(得分:1)
请在这里查看Rob的博客: https://blogs.msdn.microsoft.com/wsdevsol/2012/12/04/skip-the-path-stick-to-the-storagefile/
以下是Rob的答案:
Windows应用商店应用运行沙盒,访问权限非常有限 文件系统。在大多数情况下,他们只能直接访问他们的 安装文件夹及其应用程序数据文件夹他们没有 在别处访问文件系统的权限(请参阅文件访问和 权限更多细节)。
只有通过代理流程才能访问其他位置。 此代理进程使用用户的完全权限运行,它可以 代表app在应用程序所在的位置使用这些权限 通过功能请求,用户通过文件请求的位置 拣货员等.StorageItem封装了这个经纪程序 该应用程序不需要直接处理它。"
在UWP应用中,我们不再推荐使用路径。存在权限问题,因此在访问某些路径时需要代理。我不熟悉单元测试。但是,如果您仍在使用UWP功能,则应考虑使用与StorageFile相关的API。
答案 1 :(得分:0)
我使用Path.GetTempPath()
在需要物理磁盘访问的单元测试中创建临时目录和文件。单元测试可以从未知的上下文/位置运行,因此我发现使用temp目录作为创建一次性文件的保证方式。
[TestMethod]
public void Test()
{
var folder = Path.Combine(Path.GetTempPath(), "Snapshots");
string data = "example data";
string filename = Path.Combine(folder, "Test.snap");
File.WriteAllText(filename, json);
}
答案 2 :(得分:0)
检查你是否授予了正确的文件夹权限呢?
var folder = Path.Combine(Directory.GetCurrentDirectory(), "../../../../Snapshots");
string data = "example data";
// this variable will contain the actual folder; add a watch
// or bookmark it to check it
var actualPath = Path.GetFullPath(folder);
string filename = Path.Combine(folder, "Test.snap");
File.WriteAllText(filename, data);
以防万一,也在下面添加一行(File.WriteAllText
之前);也许你的文件已经存在,我不知道,只读:
File.SetAttributes(filename, FileAttributes.Temporary);