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