2013-01-08 49 views
-1

我發現了一個實例,我需要能夠拆分給定目錄列表/路徑的一部分。在這種情況下,我有路徑"C:\Program Files(x86)\MyApp\Data"或「C:\Program Files\MyApp\Data\myfile.txt",我想刪除之前的一切\MyApp\Data\所以我可以用它爲今後的處理。如何將全部或部分目錄列表拆分爲兩個單獨的字符串

我知道我可以做同樣的事情到以下分裂每個目錄和我可以只從那裏重建它,但我希望能夠拆分不需要路徑信息 - 只保留相關的字符串

string mypath = @"C:\Program Files(x86)\MyApp\Data"; 
string[] directories = mypath.Split(Path.DirectorySeparatorChar); 
+2

您開始使用之前用硬編碼的字符串表示正則表達式,告訴我們你將要使用的是什麼。您是否試圖獲取用戶安裝的應用程序的數據目錄的路徑?它存儲在AppDomain的DataDirectory屬性中。或者,也許你想要運行的應用程序路徑?這是'System.Reflection.Assembly.GetExecutingAssembly()。位置'。這些是你正在尋找的「給定目錄」嗎? –

+0

路徑是指已安裝應用程序的數據目錄。我查詢了給定路徑的註冊表,並嘗試獲取應用程序特定路徑(例如\ MyApp \ Data \) – Simpleton

回答

1

單從位置抽取子所需的部分開始的地方:

string s1 = @"C:\Program Files(x86)\MyApp\Data"; 
string s2 = @"\MyApp\Data\"; 

int index = s1.IndexOf(s2); 
if (index >= 0) 
{ 
    string end = s1.Substring(index); 
    string beg = s1.Substring(0, index); 
} 

但考慮,如果你可以在兩個字符串或沒有結束有\符號:

int index = s1.IndexOf(s2.TrimEnd('\\')); 
+0

如果s1不包含'\ MyApp \ Data',那麼'IndexOf(s2);'returns - 1導致's1.Substring'的異常。 – Trisped

+0

@明顯變成了。我想OP只是需要找到正確的方向,而所有的角落案例他都可以自己解決。 – horgh

1

就劈在MyApp的\數據,並刪除第一個條目:

 string mypath = @"C:\Program Files(x86)\MyApp\Data"; 
    string[] directories = mypath.Split(new string[] {@"\MyApp\Data"}, StringSplitOptions.RemoveEmptyEntries); 

    string mySavePath = mypath.Remove(0, directories[0].Length); 
    Console.WriteLine(mySavePath); 
相關問題