【问题标题】:First time access the windows folder from code第一次从代码访问 windows 文件夹
【发布时间】:2014-06-26 11:59:22
【问题描述】:

目前我正在编写一个应该访问C:\Windows\Temp 文件夹中的文件的应用程序。
当我尝试从我的代码中获取访问权限时,找不到该文件。

当我尝试在 Windows 资源管理器中打开该文件夹时,我收到一条消息。消息说:

您当前无权访问此文件夹,点击继续永久访问此文件夹。

点击Continue后问题消失,我可以从我的代码中访问该文件而没有任何麻烦。

是否可以通过代码实现相同的结果?或者也许有更好的地方来存储用户之间共享的临时文件。

在用户之间共享文件夹的动机:

我有以下工作流程:

  1. 创建数据库备份并将其存储在临时文件夹中
  2. 用数据库做一些事情
  3. 从临时文件夹中存储的文件中恢复 DB

第 1 步和第 3 步由数据库本身执行,第 2 步由我的程序执行。通常,我的程序是由数据库以外的另一个用户启动的。这就是为什么我需要在用户之间共享一个文件夹。

【问题讨论】:

  • “用户之间共享的临时文件”:这听起来是个很糟糕的主意,因为临时文件可以随时删除……你到底想做什么?
  • 通常数据库更适合提供对数据的共享访问。
  • 临时文件夹保证为c:\windows\temp。它的位置可以通过设置环境变量来改变。实际上,每个用户在他/她的个人资料文件夹中都有自己的临时文件夹。
  • @Panagiotis,我知道。这就是我使用以下代码的原因:var directory = Environment.GetEnvironmentVariable("temp", EnvironmentVariableTarget.Machine);
  • 这就是 APPDATA 文件夹的用途。 TEMP 仅用于存储临时数据

标签: .net windows temp


【解决方案1】:

您所描述的是一个坏主意,自 Windows 95 以来不鼓励使用。出于明显的原因,不允许应用程序和普通用户修改 Windows 文件夹。

Windows 提供了用于存储应用程序数据的特定文件夹,这些文件夹可以是每个用户的,也可以是应用程序的所有用户共用的。它们在Environment.SpecialFolder 枚举中定义。您可以使用Environment.GetFolderPath 检索实际值。

使用此方法是获取正确路径位置的唯一方法,因为文件夹的位置可能会因环境变量、系统策略或用户偏好而改变。

要获取每个用户的应用程序数据文件夹,请使用:

var userDataPath=Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

要获取所有用户通用的应用 dat 路径,请使用:

var dataPath=Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

确保在这些文件夹下为您的应用程序创建一个文件夹,以避免破坏其他应用程序使用的数据

【讨论】:

  • 程序没有对 CommonApplicationData 文件夹有写访问权。
  • @Hans 这解决了我认为的问题codeproject.com/Tips/61987/…
  • @HansPassant:不过,他们确实有能力创建新的公共文件夹,并且可以对这些文件夹设置任何他们希望的权限。因此,在实践中,只要您适当地设置权限,这将起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2013-01-18
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多