【问题标题】:Block creating a file in a particular folder programatically阻止以编程方式在特定文件夹中创建文件
【发布时间】:2014-03-19 10:50:37
【问题描述】:

我正在使用 C# 开发 Windows 桌面应用程序。在其中我想实现某个功能,以便用户只能在根文件夹的文件夹内创建文件。

假设如果我的根文件夹是 A,并且其中有 A1、A2、A3 文件夹,则用户可以在 A1、A2、A3 文件夹中的任何一个中创建文件。但不应该允许他直接在 A 内部创建文件。

简而言之,我只想阻止在一个特定文件夹中创建文件。有什么方法可以实现吗?是否可以使用 shell 脚本?

提前致谢!

【问题讨论】:

  • 您想禁止仅从应用程序内部在此特定文件夹中创建文件吗?还是在系统范围内阻止它?您还尝试过什么?
  • 你试过利用FileSystemWatcher吗?
  • @mnme : 从应用程序内部。Bcoz 文件夹 A 即根文件夹是从应用程序以编程方式创建的。
  • @Yahya:是的。我做到了。文件观察器不会阻止用户创建一个。它只是监视特定文件夹内发生的一切。
  • @user3222297 那么如何让用户创建文件呢?他们是否通过对话框选择路径?

标签: c# .net windows shell desktop-application


【解决方案1】:

围绕用于创建文件的 .net 方法创建一个包装器。然后实现一个黑名单(或白名单),您可以使用它来指定要阻止的文件夹(或者在允许的情况下)。

在启动时,将列表加载到List<string> 并在包装器中使用它来确定是否执行操作

例如,如果您使用File.Create 创建文件;您的包装器可能如下所示

public void CreateFile(string folderName, string fileName, IList<string> whiteList)
{
  // can I create the file in this folder ????
  if (!whiteList.Any(f => f.Equals(folderName, StringComparison.InvariantCultureIgnoreCase)))
  {
   // No apparently not... I should now throw an exception
  }

  // create the file
  File.Create(string.Format("{0}/{1}", folderName, fileName)).Dispose();

}

现在,如果您想在应用程序中创建文件,请使用 CreateFile 而不是 File.Create

【讨论】:

  • 嗨..感谢您的代码。但显然这不是我想要的。我没有使用 file.Create 方法。用户不应在 windows 中创建文件。在 Windows 中,我们可以通过右键单击并单击新建来创建文件夹。我应该这样阻止在根文件夹中创建文件!
  • 您好,根据以前的 cmets,我认为您想从应用程序中控制操作。所以如果你想限制用户在父目录中创建文件,为什么不使用标准的windows权限??? - 干杯
  • 通过使用标准的 windows 权限,我们可以限制用户仅在特定文件夹中创建文件吗?抱歉,我不太了解如何指定 windows 权限。
  • 仅根文件夹以编程方式创建。一旦用户安装了我的应用程序,就会在本地的 c 驱动器中创建一个说 A 的文件夹。用户可以在不运行应用程序的情况下创建根目录内的文件和文件夹。只需右键单击
  • 好的,现在我明白你要做什么了。我假设管理员将安装该应用程序。以下链接应该可以帮助您了解您应该使用什么权限。 uwec.edu/Help/drives/permissions.htm。您要查找的内容在文章底部(特别许可)。但是阅读整篇文章会让您对 NTFS 权限有所了解
【解决方案2】:

在创建文件夹时,

您可以检查父文件夹名称...

例如:Directory.GetParent("A\A1"); 这将为您提供文件夹名称 A 作为 DirectoryInfo 名称。

您可以将您的 RootFolderName 与 GetParent Name 进行比较,并限制从应用程序创建。

谢谢

【讨论】:

  • 正如我所说,文件创建不是以编程方式完成的。用户可以右键单击并单击新建并在本地创建文件。
  • 再说一次。我需要防止创建文件而不是创建文件夹。我需要确保不在根文件夹内创建文件,同时用户必须能够在根文件夹内创建文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多