0

可能重复:
如何检查给定的字符串是否在 Windows 下是合法的(允许的)文件名?

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

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

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

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

4

2 回答 2

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");
}

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

于 2012-08-28T23:16:07.757 回答
1

您可以从 TextBox 响应TextChanged事件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在文件顶部使用 using 语句。)

于 2012-08-28T23:17:36.977 回答