【问题标题】:File name validation文件名验证
【发布时间】:2014-03-10 12:25:31
【问题描述】:

我通过以下方式检查文件名验证:

foreach (char c in System.IO.Path.GetInvalidFileNameChars())
{
    validFileName = validFileName.Replace(c, '_');
} 

有更快的方法吗?

【问题讨论】:

    标签: c# file


    【解决方案1】:

    这可能会更快,但我几乎不认为原版会慢到可以关心...

    var invalidChars = Path.GetInvalidFileNameChars();
    var fileNameChars = validFileName.ToCharArray();
    
    for (int i = 0; i < fileNameChars.Length; ++i)
        if (invalidChars.Contains(fileNameChars[i]))
            fileNameChars[i] = '_';
    
    validFileName = new string(fileNameChars);
    

    【讨论】:

    • 有什么理由用++i而不是i++来增加索引?
    • @RandRandom 旧 C++ 时代的习惯力量,++i 可能比i++ 更有效。当然,由于优化,C# 在这种用法中的任何一种方式都没有区别。但至少我知道我在递增之前是否需要该值是准确的(++i 很明显我不需要)
    • 但是这个 for 循环不会跳过 fileNameChars[0],因为 i 前面的 ++ 意味着您在获得值之前进行增量?此代码是否达到 0。-是的,我知道我可以测试它,但附近没有 IDE :)
    • @RandRandom 不,它不会在循环开始之前 增加它。它只是在每次循环迭代结束时执行,因此无论您使用++i 还是i++ 都没有任何区别。完整定义见here。
    【解决方案2】:

    这有什么问题吗?两行实现,对此的堆栈溢出搜索显示您的答案与另一个问题How to make a valid Windows filename from an arbitrary string?的已接受答案相匹配

    【讨论】:

      猜你喜欢
      • 2012-11-19
      • 2023-03-09
      • 2023-02-22
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2018-11-26
      相关资源
      最近更新 更多