【问题标题】:Getting rid of unallowed characters in filename摆脱文件名中不允许的字符
【发布时间】:2026-01-09 21:50:01
【问题描述】:

我正在开发一个接收路径和文件名并相应地创建文件的小型应用程序。 我已经意识到 winapi 文件名中不允许使用某些字符(例如冒号、点等)。因此,一旦我从客户端收到文件名,我就想摆脱它们。 我想知道是否有一个 c 函数可以为我做到这一点。到目前为止,互联网没有带来任何东西。 提前谢谢!

【问题讨论】:

  • 你想用什么算法?例如,如果用户提供这个文件名:. 或者这个/,或者这个:,会发生什么?顺便说一句,. 在我所知道的任何现代文件系统中都不是无效字符。

标签: c windows file filenames


【解决方案1】:

不同的文件系统对于哪些字符是有效的,哪些是无效的有不同的规则。这就是为什么没有通用解决方案的原因。

最好的选择是尝试创建文件,如果失败,拒绝它。

否则您将需要研究所有限制,并手动编写代码:

【讨论】:

    【解决方案2】:

    您可以执行一个 foreach 循环并检查它是否包含不允许的字符,然后将其替换为其他内容。您可以为此使用 .Substring(number, number)。

    很抱歉没有给你一个实际的代码 sn-p,但我现在不在我的电脑上

    你可以在http://msdn.microsoft.com/en-us/library/system.string.substring.aspx查找.Substring

    希望对你有帮助!

    我发现 replace 方法和 contains 方法可以正常工作,代码如下

    string someword = "Thisisastring...";
            someword = someword.ToLower();
            Console.WriteLine(someword);
            if (someword.Contains("."))
            {
              someword = someword.Replace(".", "(dot)").ToString();
            }
            if (someword.Contains("t"))
            {
                someword = someword.Replace("t", "tee").ToString();
            }
            Console.WriteLine(someword);
    

    我希望这是你想要的。

    【讨论】: