【问题标题】:Restricting file/folder write to paths other then the specified root限制文件/文件夹写入指定根目录以外的路径
【发布时间】:2010-12-12 00:42:06
【问题描述】:

在 .NET 中是否有任何 API 允许我将某些 IO 操作限制到指定路径?

例如:

  • Root Path: C:\Test\

现在我想调用这样的函数:

  • IO.Directory.CreateDirectory("../testing/",Root)

现在我希望 API 为我处理这种情况,并且不要创建指定目录以外的文件夹。

所以这应该被创建为c:\Test\testing\ 而不是c:\testing\

我知道我可以手动执行此操作,但我想也许有一个我不知道的 API 支持这样的事情。

问题是我有一堆随机字符串,我会根据它们创建文件夹和文件,我不想向另一个文件夹写入任何内容,因为其中一个字符串包含类似 "../ "

【问题讨论】:

    标签: c# .net file path io


    【解决方案1】:

    我不知道有任何内置的 .NET API 可以满足您的需求。除了使用Path.Combine() 将字符串组合成完整路径,然后手动检查它是否植根于您想要的位置之外,我想不出任何办法。

    【讨论】:

      【解决方案2】:

      除了使用 DirectoryInfo 类之外,我建议创建一个简单的扩展方法并使用 Path.Combine 静态方法。

      // Extension Method
      public static class DirectoryExtension
      {
          public static void CreateDirectory(this DirectoryInfo root, string path)
          {
              if (!Directory.Exists(root.FullName))
              {
                  Directory.CreateDirectory(root.FullName);
              }
      
              string combinedPath = Path.Combine(root.FullName, path);
              Directory.CreateDirectory(combinedPath);
          }
      }
      
      // Usage
      DirectoryInfo root = new DirectoryInfo(@"c:\Test");
      root.CreateDirectory("testing");
      root.CreateDirectory("testing123");
      root.CreateDirectory("testingabc");
      root.CreateDirectory(@"abc\123");
      

      【讨论】:

      • Combine 在此不起作用:Path.Combine("c:\test\", "\inroot") == "c:\inroot"
      【解决方案3】:

      我找到了一个:

      DirectoryInfo.CreateSubdirectory()
      

      不是完全相同的东西,而是相似的,它检查给定的路径是否实际上是一个子目录。

      【讨论】:

        【解决方案4】:

        在 *nix 环境中称为 chroot (jailroot)。我不确定 .net 中是否有类似的内容,但您可以尝试 google chroot 搜索 .net(或 jailroot 搜索 .net)。

        【讨论】:

        • chroot 有点像权限,我更喜欢一个简单的 API 调用,它将为我解决规范化问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 2016-03-24
        • 2020-09-08
        相关资源
        最近更新 更多