wpf - 如果用户没有写权限,如何写入文件

标签 wpf file c#-4.0 permissions

嗨,我有一个创建/写入日志文件的应用程序(稍后它将写入错误日志) 但目前我坚持权限问题,因为如果用户无权在我的应用程序所在的文件夹中创建文件,则会抛出异常

现在我的问题是如何获得(来自用户)独立创建和编写此应用程序的权利

我读到this但这没有帮助,因为客户端无法授予该权限 (他们未经授权)但我的应用程序需要该权限

我们将不胜感激您的帮助

最佳答案

将程序二进制文件与其数据分开是一个常见的概念(我什至可以说是最佳实践)。

例如,所有Windows应用程序都位于程序文件下,但将其数据写入用户的%APPDATA%(用于个人数据)或%ProgramData%下 用于共享数据。您应该遵循此准则,除非您的计划有非常具体的要求。

根据数据的类型,特别是如果您希望用户快速找到数据,您还可以在用户的​​文档文件夹下创建一个子文件夹。

使用 C#,您将能够使用 Environment.GetFolderPath Method 轻松找到这个特殊文件夹 。例如:

public string GetDataFolder()
{
    var appDataPath = Environment.GetFolderPath(
        Environment.SpecialFolder.ApplicationData, // Search under %APPDATA%
        Environment.SpecialFolderOption.Create // Create the folder if it does not exists
    );
    var dataFolder = Path.Combine(
        appDataPath,
        "MyApplication"
    );
    return dataFolder;
}

如果你看Environment.SpecialFolderOption Enumeration ,你会发现大多数常见的地方都很容易找到。

正如您所说,数据将由所有用户共享,您应该专门针对 %ProgramData%,它是通过使用 Environment.SpecialFolder.CommonApplicationData 找到的:

The directory that serves as a common repository for application-specific data that is used by all users.

最终,此文件夹将被解析为(使用默认设置)C:\Programdata\MyApplication

关于wpf - 如果用户没有写权限,如何写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13532227/

相关文章:

c# - "Global"WPF ViewModel 属性

wpf - Application.Dispatcher.UnhandledException 和 CurrentDomain.UnhandledException

c++ - 后续用C++对Files进行读写操作

c# - 动态地向动态对象添加属性?

c#-4.0 - 尝试使用 Oracle Data Access ODP.NET 11.2 执行 ExecuteReader() 时出现 InvalidOperationException

WPF HwndHost 键盘焦点

c# - 在单击Gridview行时,更新另一个控件

python - 将两个字符变成一个符号(Python)

c# - 如何在 C# 中为文件设置清除属性 "X"?

c#-4.0 - 通过将所需类型作为参数传递来将字符串值转换为特定类型