关于winforms:C#删除不允许的文件夹名称字符

C# remove unallowed folder name characters

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How check if given string is legal (allowed) file name under Windows?

我搜索过,花了几分钟谷歌搜索,但我不能应用我找到的,我的背景..

1
2
3
4
5
6
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
        string fname = projectNameBox.Text;
        if (projectNameBox.TextLength != 0)
        {

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

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


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

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

1
2
3
4
5
6
7
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语句。)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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");
}

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