2010-03-25 46 views
2

System.IO.Path是非常笨拙的工作。在我的各種項目,我一直在遇到需要使用重複的,繁瑣,因而容易出錯的代碼片段相同的使用場景Path.CombinePath.GetFileNamePath.GetDirectoryNameString.Format等場景,如:C#的一個好的文件路徑生成器庫?在.NET中使用

  • 更改擴展對於給定文件名
  • 改變的目錄路徑給定文件名
  • 使用字符串格式化(如「Package{0}.zip」)
  • 建設的路徑,而不訴諸使用硬編碼目錄分隔符像建立一個文件路徑(因爲他們沒有在Linux上的單聲道工作)
  • 等等等等

開始寫我自己的PathBuilder類或類似的東西之前:是有這樣的好(和證實)的開源實現在C#中的東西?

UPDATE:OK,只是我的意思說明:

 string zipFileName = Path.GetFileNameWithoutExtension(directoryName) + ".zip"; 
     zipFileName = Path.Combine(
      Path.GetDirectoryName(directoryName), 
      zipFileName); 

一個更好的流利的API可能看起來像這樣:

Path2 directoryName = "something"; 
Path2 zipFileName = directoryName.Extension("zip"); 

或修建道路時:

Path2 directoryName = "something"; 
Path2 directory2 = directoryName.Add("subdirectory") 
    .Add("Temp").Add("myzip.zip"); 

而不是

string directory2 = Path.Combine(Path.Combine(Path.Combine(
    directoryName, "subdirectory"), "Temp"), "myzip.zip"); 

我其實在過去實現過這樣的事情,但在一個單獨的項目中。我決定現在將它重用爲一個獨立的C#類,在VisualStudio的其他項目中添加「作爲鏈接」。這不是一個最乾淨的解決方案,但我想它會做。如果你有興趣,you can see the code here

+2

我很好奇你爲什麼認爲這些可能容易出錯? – 2010-03-25 08:34:37

+0

因爲您需要在很多地方重寫相同或相似的代碼,每次重新發明輪子。遲早你會得到一個錯誤(錯誤的方法稱爲等)。 – 2010-03-25 09:28:08

+0

我認爲你已經知道'FileInfo'和'DirectoryInfo'了嗎? – 2010-03-25 10:18:32

回答

8

您應該先看看框架第4版中Path的增強功能。

例如,Path.Combine現在將接受多個路徑片段,而不是必須將它們嵌套。

+0

不錯,但我正在尋找適合現有代碼庫(至少3.5)的東西。 – 2010-03-25 09:29:49

3

System.IO.Path已經涵蓋了從您的列表如下:

  • 更改擴展給定文件名
  • 改變的目錄路徑給定文件名
  • 建設路徑,而不訴諸使用硬編碼的目錄分隔符,如\(因爲他們不適用於Mono上的Linux)

而且您可以輕鬆地創建一個類或一些擴展方法來執行rema基於Path類。

+0

我沒有說這是不可能的。我只是說API可能會好得多。 – 2010-03-25 09:28:43

+1

我和Henk在這裏。現有的API非常好。如果您希望它看起來不同,請使用擴展方法重新構建它,但例如上面的示例不使用已經存在的Path.ChangeExtension方法。在查看更改API之前,我會尋找更好的方法來處理您嘗試使用的API。 – 2010-03-25 11:59:51

+0

Iain,現在不是我已經用了5-6年的時間了:)。所以我想在這麼長時間後我可以認爲它不太好。但我想這是一個味道的問題。但我建議看看溫莎城堡,FluentNHibernate,AutoMapper等類似的API。 – 2010-03-25 12:25:14

3

FluentPath看起來不錯,整齊。

+0

是的,這方面的東西,雖然FluentPath是更雄心勃勃,它也包含了IO文件系統操作。 – 2010-03-25 09:52:19

相關問題