C#删除不允许的文件夹名称字符

时间:2012-08-28 22:50:58

标签: c# winforms character directory

  

可能重复:
  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并创建一个文件为文件名的文件,但如果我包含一个:,或者一个\或一个/等等......它会崩溃,这是正常的,因为它们是不允许使用文件夹名称。如何在文件创建之前检查文本,删除字符,甚至更好,什么也不做,并建议用户不能使用这些字符? 提前致谢

2 个答案:

答案 0 :(得分: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");
}

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

答案 1 :(得分:1)

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

要创建事件处理程序,请单击设计器中的projectNameBox控件,单击Events窗口中的Properties图标,然后双击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的使用声明。)