2010-07-20 82 views
3

我正在編寫一個應用程序,我想比較兩個字符串的大小。按照大小,我的意思是如果將它們直接保存到磁盤上,它們將佔用的磁盤空間。計算一個字符串將佔用磁盤空間而不將其保存到磁盤

是否可以通過計算C#中字符串的大小而不將其保存到磁盤並檢查文件信息(除非將其更高效地保存到磁盤)?

+1

你需要四捨五入到最接近的部門或羣集或什麼? – 2010-07-20 19:57:40

回答

8

是的,這很容易:

Encoding encoding = Encoding.UTF8; // Or whatever 
int size = encoding.GetByteCount(text); 

請注意,這是在編碼形式的字節數。如果您的文件系統正在執行壓縮等操作,則預測所採用的物理大小變得非常困難(或不可能)。

不得不挑選編碼。真的沒有「直接」保存到磁盤的東西 - 你必須選擇一個二進制表示。

+1

就磁盤空間而言,它可能是多倍的簇大小。 – 2010-07-20 20:00:24

+0

@Chris:假設它自己在一個文件中......可能並非如此。 – 2010-07-20 20:32:22

+0

我認爲這是我的觀點。即使字符串被附加到文件中的現有數據,如果字符串的最後一個字節導致下一個羣集被分配,那麼它將具有完整羣集的磁盤大小成本。 – 2010-07-21 15:28:15

2

將數據保存到磁盤時,將數據寫入羣集中,具體取決於磁盤大小和文件系統,羣集大小會有所不同。

對於大小小於16TB的NTFS磁盤,簇大小爲4K,這意味着1字節的字符串將佔用4K磁盤空間,而5000字節的字符串將佔用8K的磁盤空間。

這裏是與各種MS filesytems和默認的簇鏈接大小 http://support.microsoft.com/kb/140365