【问题标题】:How can I get a consistent path for read/write application in C# apps?如何在 C# 应用程序中为读/写应用程序获得一致的路径?
【发布时间】:2021-03-06 16:07:02
【问题描述】:

我有一个 C# 应用,它需要能够读取和写入文件,所有用户都可以使用这些文件。

我认为这会给我一个合适的位置来存储这些文件:

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

我有 2 个应用程序需要访问相同的文件夹。主应用程序是 UWP,还有一个实用程序应用程序是控制台应用程序。在 Windows 10 上运行。

主应用程序返回:

C:\Users\User\AppData\Local\Packages\ba131026-0d4a-4706-afec-3246196e7d60

控制台应用返回的要简单得多:

C:\ProgramData

我不介意我使用哪个,但我只需要它们能够访问同一个文件夹。是否有某种方法可以始终从两种类型的应用程序中获取相同的文件夹?

【问题讨论】:

  • 刚刚尝试了 Environment.SpecialFolder.CommonDocuments,它始终返回 C:\Users\Public\Documents,所以这可能是一个更好的选择?

标签: c# windows-10 environment-variables directory-structure


【解决方案1】:

UWP 应用在沙盒中运行,这就是为什么 Environment.SpecialFolder.CommonApplicationData 不指向“常规”文件夹 C:\ProgramData

我建议不要使用CommonDocuments,因为这意味着为 UWP 应用提供比所需更多的权限,而且看起来相当麻烦(请参阅此answer)。

相反,我建议从控制台应用程序中访问 UWP 应用程序的文件夹,该文件夹始终为 %LOCALAPPDATA%/Packages/AUMID,其中 AUMID 是 UWP 应用程序标识符(应用程序用户模型 ID)。

var aumid = "ba131026-0d4a-4706-afec-3246196e7d60"
var path = Path.Combine(
     Environment.GetFolderPath(
         Environment.SpecialFolder.LocalApplicationData), 
         $"/Packages/{aumid}"
     )
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2010-12-15
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多