限制文件/文件夹的写入路径只能在指定的根目录之外

3
在.NET中,是否有任何API可以让我将某些IO操作限制在指定路径内?
例如:
根路径:C:\Test\
现在我想调用这样的函数:
IO.Directory.CreateDirectory("../testing/", Root)
现在我希望API为我处理此情况,不要创建除指定目录之外的文件夹。
因此,应该创建为c:\Test\testing\而不是c:\testing\。
我知道我可以手动完成此操作,但我想也许有一个我不知道支持此事的API。
问题是,我有一堆随机字符串,我将根据这些字符串创建文件夹和文件,我不想将任何东西写入另一个文件夹,因为其中一个字符串包括类似“../”的字符串。
4个回答

1
在*nix环境中,这被称为chroot(jailroot)。我不确定在.net中是否有类似的东西,但你可以尝试在谷歌上搜索chroot for .net(或jailroot for .net)。

chroot 更多是关于权限的问题,我更需要一个简单的 API 调用来为我解决规范化问题。 - dr. evil

0
我找到了一个:
DirectoryInfo.CreateSubdirectory()

虽然不是完全相同的东西,但类似的功能,它会检查给定的路径是否实际上是子目录。


0
除了使用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" - dr. evil

0

我不知道有没有内置的.NET API可以做你想要的事情。除了使用Path.Combine()将字符串组合成完整路径,然后手动检查它是否根据你的要求设置,我想不到其他办法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接