private void button5_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog fbd = new FolderBrowserDialog())
            {
                fbd.Description = "选择一个文件夹,用来指定存放某种节目内容或其它媒体文件。";
                fbd.RootFolder = Environment.SpecialFolder.MyComputer;
                if (fbd.ShowDialog() == DialogResult.OK)
                {
                    textBox1.Text = string.Empty;
                    textBox1.Text = fbd.SelectedPath;
                    textBox1.Refresh();
                }
            }
            string mastr1 = @"^(?<Drive>([a-zA-Z]:\\)|(\\{2}\w+)\$?)((([^/\\\?\*])(\\?))*)$";
            string mastr2 = @"^(([a-zA-Z]:\\)|(\\{2}\w+)\$?)((([^/\\\?\*])(\\?))*)$";            string path = textBox1.Text;
            Regex re = new Regex(mastr1, RegexOptions.IgnoreCase);
            Match m = re.Match(path);             MessageBox.Show(  m.Success.ToString ());            //if (System.IO.Directory.Exists(this.textBox1 .Text))
            //{ MessageBox.Show("不存在该目录夹,请选择正确路径", "提示"); return; }
        }
虽然可以pass,希望大家有更好的建议  //F:\벗 우 友이길 승胜.txt\~ @#$() ,' gfafsd 23423
 //E:\css.appfuse.org.theme.cssframework\换肤技术\images\sfs_sds -sf sf &% 78\3242以上两个可以通过,但我没理解这个写法的真正的含义,为什么要这样写,mastr1 和mastr2有区别么

解决方案 »

  1.   

    正则表达式只能检测出字符串是不是符合系统路径格式,并不代表真实的磁盘路径比如 y:\abdc\te  用正则表达式返回true ,而实际根本没有这个盘符
      

  2.   

    真正检测磁盘路径还是需要用System.IO.Directory.Exists
      

  3.   


            //F:\벗 우 友이길 승胜.txt\~ @#$() ,' gfafsd 23423
                //E:\css.appfuse.org.theme.cssframework\换肤技术\images\sfs_sds -sf sf &% 78\3242
                string mastr1 = @"^(?<Drive>([a-zA-Z]:\\)|(\\{2}\w+)\$?)((([^/\\\?\*])(\\?))*)$";
                string mastr2 = @"^(([a-zA-Z]:\\)|(\\{2}\w+)\$?)((([^/\\\?\*])(\\?))*)$";            string path = cgmtxtDIR.Text;
                System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex(mastr1, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                System.Text.RegularExpressions.Match m = re.Match(path);
                if (m.Success && System.IO.Directory.Exists(cgmtxtDIR.Text))
                {
                    //MessageBox.Show(flag.ToString());
                    switch (flag)
                    {
                        case 0:
                            NewSave();
                            break;
                        case 1:
                            EditUpdata();
                            break;
                        default:
                            break;
                    }
                }
                else
                { MessageBox.Show("不存在该目录夹,请选择正确路径", "提示"); return; }            
    事实上我已经这样写了,
    如果只有System.IO.Directory.Exists(cgmtxtDIR.Text)cgmtxtDIR.Text=@"F:\\第三方软件\1000"好像没效果,所以要加正则先验字符串再验路径存在性
      

  4.   

    注意System.IO.Directory.Exists的返回值if (System.IO.Directory.Exists(this.textBox1.Text) == false)
    { MessageBox.Show("不存在该目录夹,请选择正确路径", "提示"); return; }
      

  5.   

    正则表达式的概念是什么?不就是把一些错误提前抛弃么?记住,它只是你的一道门槛,具体的目录是否存在,用System.IO.Directory.Exists。你理解的非常到位