2009-11-01 94 views
3

在.NET中是否有任何API允許我將某些IO操作限制爲指定的路徑?限制文件/文件夾寫入指定的根以外的路徑

例如:

  • Root Path: C:\Test\

現在我想打電話給這樣的功能:

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

,現在我想的API來處理這種情況請不要創建指定目錄以外的文件夾。

所以這應該c:\Test\testing\而不是c:\testing\創建。

我知道我可以手動做到這一點,但我想也許有,我不知道它支持這樣的事情的API。

事情是我有一堆隨機字符串,我將箱子文件夾,並根據他們的文件,我不想寫任何東西到另一個文件夾,因爲這些字符串的一個包括像一個字符串」 .. /」

回答

1

在* nix中envoirnements這就是被稱爲一個chroot(jailroot)。我不確定在.net中是否有這樣的內容,但是你可以嘗試google。chroot .net(或者.net的jailroot)。

+0

chroot環境更像是有關權限的一點,我是一個簡單的API調用,將採取規範化問題,我經過。 – 2009-11-01 11:12:54

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"); 
+0

Combine在此不起作用:Path.Combine(「c:\ test \」,「\ inroot」)==「c:\ inroot」 – 2009-11-01 12:03:28

0

我不知道任何內置的.NET API來做你想做的。除了使用Path.Combine()將字符串組合成完整路徑,然後手動檢查它是否根源於您想要的位置之外,我想不出任何其他操作。