2010-06-18 56 views
0

我正在更新它使用下面的代碼放置基於日期的文件夾中的文件的項目:此DateTime優化是否會導致本地化問題?它會更有效率嗎?這值得麼?

int month = DateTime.Now.Month; 
string zero = (month < 10) ? "-0" : "-"; 
string folder = "Folder" + DateTime.Now.Year.ToString() + zero + month.ToString() + "\\"; 
if (!Directory.Exists(folder)) 
{ 
    Directory.CreateDirectory(folder); 
} 
ArchiveFolder = folder; 
//... 
DateTime now = DateTime.Now; 
int date = now.Day; 
string zero = (date < 10) ? "0" : ""; 
string saveaspath = zero + date.ToString() + "_" + now.ToLongTimeString() + "_" + name; 
#if DOTNET20 
foreach (char c in Path.GetInvalidFileNameChars()) 
#else 
foreach (char c in Path.InvalidPathChars) 
#endif 
    saveaspath = saveaspath.Replace(c, '-'); // substitute - for bad chars 
saveaspath = saveaspath.Replace(':', '-'); 
string originalname = saveaspath; 
string ext = ".ext"; 
saveaspath = Path.Combine(ArchiveFolder, saveaspath + ext); 
int count = 1; 
while (File.Exists(saveaspath)) // make unique 
{ 
    string num = " (" + count++.ToString() + ")"; 
    saveaspath = Path.Combine(ArchiveFolder, originalname + num + ext); 
} 

例生成的文件: Folder/2010-06/18_2-42-09 PM_name.ext

這是爲每個文件運行通常由於程序的性質,一般爲許多文件。

我在考慮用DateTime格式字符串更新連接的DateTimes - 我想這可能比所有這些不同的ToString()等更高效。不過,我很緊張,當用戶有不同的文化設置時可能會搞砸。然後,再次,這個當前的代碼可能會做一些時髦 - 我不知道。

所以:我應該使用格式字符串重做代碼嗎?或者保持原樣?它會使性能受益嗎?它會依賴於文化嗎?

(澄清:我的問題不是如何使用格式字符串重寫它;相反,我關心的是,這樣做的後果。)

回答

3

我應該使用格式字符串重做代碼嗎?

如果將其簡化爲使用格式字符串,它將更加健壯和可維護。

還是保持原樣?

如果不打破現有的行爲對你非常重要,那麼最好離開它。另一方面,如果事實證明現有代碼中存在錯誤,那麼從頭開始重寫它可能是一個很好的機會。

對性能有好處嗎?

如果您的代碼正在寫入文件,我幾乎認爲創建字符串所花的時間將成爲瓶頸。相比之下,寫入文件是一項非常慢的操作。

它會依賴於文化嗎?

格式化時使用CultureInfo.InvariantCulture以避免文化依賴性。

+0

感謝您的超級深入解答 - 回答我的所有問題!聽起來不錯。 – NickAldwin 2010-06-18 20:02:12

1

是。使用格式字符串時,您應該面臨更少的本地化問題,而不是使用當前使用的當前使用的ToString方法調用的當前文化版本。

+0

非常好。當我看到這段代碼時,我首先想到的是......然後我第二次猜到了我自己。謝謝。 – NickAldwin 2010-06-18 19:56:35