代码之家  ›  专栏  ›  技术社区  ›  NickAldwin

此日期时间优化是否会导致本地化问题?它会更有效吗?值得吗?

  •  0
  • NickAldwin  · 技术社区  · 16 年前

    我正在更新一个项目,该项目使用以下代码根据日期将文件放在文件夹中:

    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格式字符串更新连接的日期时间——我认为这可能比所有这些不同的toString()等调用更有效;但是,当用户具有不同的区域性设置时,我担心这可能会出错。再说一次,当前的代码可能会做一些奇怪的事情——我不知道。

    那么:我应该使用格式字符串重做代码吗?还是保持原样?它会对性能有好处吗?它会依赖于文化吗?

    (澄清:我的问题不是如何使用格式字符串重写它;而是,我关心这样做的后果。)

    2 回复  |  直到 16 年前
        1
  •  3
  •   Mark Byers    16 年前

    我应该使用格式字符串重做代码吗?

    如果将其简化为使用格式字符串,它将更加健壮和可维护。

    还是保持原样?

    如果不打破现有的行为对你来说非常重要,那么最好还是离开它。另一方面,如果发现现有代码中存在错误,那么从头重写可能是一个很好的机会。

    它会对性能有好处吗?

    如果您的代码正在写入文件,我几乎不认为创建字符串所花费的时间会成为瓶颈。相比之下,写入文件是一个非常缓慢的操作。

    它会依赖于文化吗?

    使用 CultureInfo.InvariantCulture 设置格式以避免文化依赖。

        2
  •  1
  •   Tetsujin no Oni    16 年前

    对。 在使用格式字符串而不是使用当前正在使用的ToString方法调用的区域性版本时,您应该面对较少而不是更多的本地化问题。