【问题标题】:C# remove unallowed folder name characters [duplicate]C#删除不允许的文件夹名称字符[重复]
【发布时间】:2012-08-23 12:22:39
【问题描述】:

可能重复:
How check if given string is legal (allowed) file name under Windows?

我已经搜索过,花了几分钟谷歌搜索,但我无法将我找到的内容应用到我的上下文中......

string appPath = Path.GetDirectoryName(Application.ExecutablePath);
        string fname = projectNameBox.Text;
        if (projectNameBox.TextLength != 0)
        {

            File.Create(appPath + "\\projects\\" + fname + ".wtsprn");

所以,我正在检索 projectNameBox.Text 并创建一个以文本作为文件名的文件,但如果我包含 :、\ 或 / 等,它就会崩溃,这是正常的,因为那些是不允许使用文件夹名称..我如何在文件创建之前检查文本并删除字符,或者更好的是什么都不做并建议用户他不能使用这些字符? 提前致谢

【问题讨论】:

  • 您使用的是 WinForms 还是 WPF?
  • System.IO.Path.GetInvalidPathChars():
  • 我正在使用 Windows 窗体,抱歉没有指定!和eulerfx ..我怎样才能适应这种情况..这让我很困惑!
  • @1337patchy - 谢谢,我已将其添加到标签中。

标签: c# winforms character directory


【解决方案1】:
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
string fname = projectNameBox.Text;

bool _isValid = true;
foreach (char c in Path.GetInvalidFileNameChars())
{
    if (projectNameBox.Text.Contains(c))
    {
        _isValid = false;
        break;
    }
}

if (!string.IsNullOrEmpty(projectNameBox.Text) && _isValid)
{
    File.Create(appPath + "\\projects\\" + fname + ".wtsprn");
}
else
{
    MessageBox.Show("Invalid file name.", "Error");
}

在第一条评论中提供的链接中有一个正则表达式示例。

【讨论】:

  • 非常感谢各位先生 :)
【解决方案2】:

您可以从projectNameBox TextBox 响应TextChanged 事件,以拦截对其内容所做的更改。这意味着您可以在以后创建路径之前删除所有无效字符。

要创建事件处理程序,请单击设计器中的projectNameBox 控件,单击Properties 窗口中的Events 图标,然后双击下面出现的列表中的TextChanged 事件。以下是一些去除无效字符的代码的简要示例:

private void projectNameBox_TextChanged(object sender, EventArgs e)
{
    TextBox textbox = sender as TextBox;
    string invalid = new string(System.IO.Path.GetInvalidFileNameChars());
    Regex rex = new Regex("[" + Regex.Escape(invalid) + "]");
    textbox.Text = rex.Replace(textbox.Text, "");
}

(您还需要在文件顶部使用 System.Text.RegularExpressions 的 using 语句。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多