我正在更新一个项目,该项目使用以下代码根据日期将文件放入文件夹中:
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()等调用更有效;但是,当用户有不同的文化设置时,我会感到紧张。然后,这个当前的代码可能会做一些时髦的事情 - 我不知道。
所以:我应该使用格式字符串重做代码吗?还是保持原样?它会对性能有益吗?它会依赖于文化吗?
(澄清一下:我的问题不是如何使用格式字符串重写它;相反,我关注这样做的后果。)
答案 0 :(得分:4)
我应该使用格式字符串重做代码吗?
如果将其简化为使用格式字符串,那么它将更加健壮和可维护。
还是保持原样?
如果不打破现有行为对您来说非常重要,那么最好留下它。另一方面,如果事实证明现有代码中存在错误,那么从头开始重写它可能是一个很好的机会。
它会对性能有益吗?
如果您的代码正在写入文件,我几乎不认为创建字符串所花费的时间将成为瓶颈。相比之下,写入文件的速度非常慢。
它会依赖文化吗?
格式化时使用CultureInfo.InvariantCulture
以避免文化依赖。
答案 1 :(得分:1)
是。使用格式字符串而不是现在使用的ToString方法调用的use-current-culture版本时,您应该面对更少而不是更多的本地化问题。