我想打开一个特定的swj.mdb文件。
这个文件可放在任何位置。
如果用户选择的不是这个文件,那么系统就会提示“请选择你机器上的swj.mdb文件”private void swjopenFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
if(!swjopenFileDialog.CheckFileExists)
{
}
    

           
}
具体代码应该怎样写呢?

解决方案 »

  1.   

    //将上传文件保存到根目录的upload文件夹下,其中myfile是个<input type=file id="myfile" runat=server>的控件
    string url=myfile.Value.ToString().Trim();
    if(url==null||url=="")
    {
    Response.Write("<script>alert('请选择文件名!')</script>");
    return;
    }
    System.IO.FileInfo fi=new FileInfo(url);
    string filename=fi.Name.ToString();//取文件名
    string extname=fi.Extension.ToString();//取文件后缀
    if(filename!="swj.mdb")
    {
    Response.Write("<script>alert('请选择您机器上的swj.mdb文件!')</script>");
    return;
    } if(extname!=".mdb"||extname.Length<1)
    {
    Response.Write("<script>alert('数据导入失败,可能是文件格式错误!')</script>");
    return;
    }
    myUrl=Server.MapPath("")+"\\upload"+"\\"+filename;
    myfile.PostedFile.SaveAs(myUrl);
      

  2.   

    根据swjopenFileDialog.FileName来得到文件名,然后判断一下是否与swj.mdb相同
      

  3.   

    cfs1979(学无止境)swjopenFileDialog.FileName是这个文件的物理路径
    我怎么判断这个路径里是否包含swj.mdb
    能给我简单的代码吗
      

  4.   

    .Net 2.0 中可以使用 System.IO.Path.GetFileName(string); 来获取物理路径中的文件名。如果还是 .Net 1.1 的话,可以 这样string swjfileName = swjopenFileDialog.FileName.SubString(swjopenFileDialog.FileNaem.LastIndexOf('\\') + 1);如果是 Url ,就把斜杠反向。
      

  5.   

    这段代码我写在button_click事件里
    一运行就出现错误。正确的应该怎样写呢?
      

  6.   

    最好的办法应该是在客户端用javascript进行文件名验证。
    其次才是在服务器端验证。
      

  7.   

    private void swjopenFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
    {
                OpenFileDialog ofDlg = new OpenFileDialog();
                ofDlg.ShowReadOnly = false;
                ofDlg.Filter = "数据库文件(swj.mdb)|swj.mdb";;
                ofDlg.Title = "请选择 swj.mdb 文件";
                ofDlg.CheckFileExists = true;
                ofDlg.CheckPathExists = true;
                ofDlg.ValidateNames = true;
                ofDlg.Multiselect = false;
                DialogResult y = ofDlg.ShowDialog();    
                if (y == DialogResult.OK)
                {
                    string fileName = ofDlg.FileName;
                    if(fileName.Contains('\\'))
                        fileName = fileName.SubString(fileName.LastIndexOf('\\'));
                    if(fileName != "swj.mdb")
                    {
                        MessageBox.Show(this, "选择的文件不正确!"); // 提示错误信息。
                        e.Cancel = true; // 取消事件??
                    }
                }
                else e.Cancel = true; //取消事件??
    }
      

  8.   

    用 fileName.EndsWith("swj.mdb") 来判断也可以。
    不过不严格,比如 hacker.swj.mdb 用这种方法也能通过。
    可以进一步判断: swj.mdb 后面没有字符,swj.mdb 前一个字符是 \  才合法
      

  9.   

    zCheng(NullRefrenceExceptionif(fileName.Contains('\\'))
                        fileName = fileName.SubString(fileName.LastIndexOf('\\'));
    “fileName”并不包含对“Contains”的定义
      

  10.   

    我将
    OpenFileDialog ofDlg = new OpenFileDialog();
                ofDlg.ShowReadOnly = false;
                ofDlg.Filter = "数据库文件(swj.mdb)|swj.mdb";;
                ofDlg.Title = "请选择 swj.mdb 文件";
                ofDlg.CheckFileExists = true;
                ofDlg.CheckPathExists = true;
                ofDlg.ValidateNames = true;
                ofDlg.Multiselect = false;
                DialogResult y = ofDlg.ShowDialog();    
    这段代码写在buttom_click事件里没问题吧?将
     DialogResult y = ofDlg.ShowDialog();    
                if (y == DialogResult.OK)
                {
                    string fileName = ofDlg.FileName;
                    if(fileName.Contains('\\'))
                        fileName = fileName.SubString(fileName.LastIndexOf('\\'));
                    if(fileName != "swj.mdb")
                    {
                        MessageBox.Show(this, "选择的文件不正确!"); // 提示错误信息。
                        e.Cancel = true; // 取消事件??
                    }
                }
                else e.Cancel = true; //取消事件??
    }写在swjopenFileDialog_FileOk事件里。
      

  11.   

    没有吗?……不要那段代码也可以,或者用 fileName.IndexOf('\\') >= 0 代替。记得应该是 string 类的一个方法啊……如果你放在两个方法里……信息无法共享,因为变量 y 保存的内容一旦离开 buttom_click 就被释放了,你 swjopenFileDialog_FileOk 的 y 已经不是原来的 y 了。你可以通过事件参数传递对话框的结果(将整个 ofDlg 传过去)。或者直接在 button_Click 事件中完成判断。
      

  12.   

    ……一句话:直接在 button_Click 里完成判断并做出回应就可以了。用 IndexOf('\\') 来判断 fileName 中是否包含路径分隔符:返回结果大于等于零代表有路径分隔符,小于零代表没有
      

  13.   

    参考代码段:private bool ValiadateFileName(string fileName)
    {
        if(fileName.IndexOf('\\') >= 0) // 判断文件名中是否包含路径分隔符
            fileName = fileName.SubString(fileName.LastIndexOf('\\') + 1); //存在的话获取最后一个路径分隔符后的内容作为文件名
        return (fileName == "swj.mdb"); //判断文件名是否为给定的文件名
    }private void btnSelectFile_Click(object sender, System.EventArgs e)
    {
        OpenFileDialog ofDlg = new OpenFileDialog(); // 初始化打开文件对话框的新实例
        ofDlg.ShowReadOnly = false;                  // 隐藏“以只读方式打开”复选框
        ofDlg.Filter = "数据库文件(swj.mdb)|swj.mdb";// 设置文件过滤器,
                                                     // 只让对话框中显示 swj.mdb 文件
        ofDlg.Title = "请选择 swj.mdb 文件";         // 设置对话框标题
        ofDlg.CheckFileExists = true;                // 要求打开的文件必须存在
        ofDlg.CheckPathExists = true;                // 要求打开的路径必须存在
        ofDlg.ValidateNames = true;                  // 验证输入的文件名是否符合文件名命名规范
        ofDlg.Multiselect = false;                   // 禁止选择多个文件
        DialogResult y = ofDlg.ShowDialog();         // 显示对话框,并保存返回结果
        if (y == DialogResult.OK)                    // 如果用户按的是“确定”按钮
           if(ValiadateFileName(ofDlg.FileName))     // 验证文件名
           {
                // 验证通过,进行进一步操作
           }
           else
           {
               // 验证失败,提示,取消操作
               MessageBox.Show(null, "请选择 swj.mdb 文件!");
           }
    }
      

  14.   

    始终没搞好
    private void button1_Click(object sender, System.EventArgs e)
    {
    OpenFileDialog swjopenFileDialog=new OpenFileDialog();
    swjopenFileDialog.InitialDirectory="D:\\qqq/qq";
    swjopenFileDialog.Filter="数据库文件|*.mdb";
    swjopenFileDialog.FileName="swj.mdb";
    swjopenFileDialog.RestoreDirectory=true;
    swjopenFileDialog.CheckFileExists = true;
    swjopenFileDialog.CheckPathExists = true;
    swjopenFileDialog.ValidateNames = true;
    swjopenFileDialog.Multiselect = false; swjopenFileDialog.FilterIndex=1;
    DialogResult y = swjopenFileDialog.ShowDialog();         // 显示对话框,并保存返回结果
    if (y == DialogResult.OK)                    // 如果用户按的是“确定”按钮
    if(ValiadateFileName(swjopenFileDialog.FileName))     // 验证文件名
    {
    // 验证通过,进行进一步操作
    }
    else
    {
    // 验证失败,提示,取消操作
    MessageBox.Show("请选择swj.mdb 文件!");
    }
    else 
    {
    this.Close();
    }
    一执行就会出现异常!
      

  15.   

    关键是异常是什么异常?异常总该有一个名字吧??(那个 XXXXException 这类的),而且应该有异常信息提示啊、
    swjopenFileDialog.FilterIndex=1;
    为什么设为 1 呢?文件类型筛选器是从 0 起的吧?而且,为什么你要 this.Close() 呢?swjopenFileDialog.CheckFileExists = true;有这段代码以后,不可能一个文件不选允许你点确定来关闭打开文件对话框的,难道异常是对话框执行时抛出的?
      

  16.   

    为什么要this.close()? 我是想用户不选择swj.mdb的时候,点“取消”就关闭这个窗口。当用户选择的不是swj.mdb时,系统需给出一个错误信息。现在我按照上面的代码运行的时候,我一个文件都不选择,直接点“确定”,就会出现异常,DialogResult y = swjopenFileDialog.ShowDialog();         这段代码高亮显示!!!
      

  17.   

    我亲自做了试验,如果一个文件不选,直接点确定系统是不会被关闭
    “打开文件”对话框的,而且也没有产生任何异常。
    如果你希望别人只选择 "swj.mdb", 应该在筛选器设置时直接筛选出 swj.mdb 如下面:swjopenFileDialog.Filter = "数据库文件(swj.mdb)|swj.mdb";这样对话框中只会显示名字为 swj.mdb 的文件其它文件一概不显示……)
    你用的是 Vs 2005 还是 2003 ?
    高亮显示的代码不一定都是异常啊,断点也会高亮显示的。产生异常时,如果你用 Vs 2005 的话,应该会有一个“异常助手”显示并指向高亮代码;如果是 Vs 2003 的话,应该先弹出一个对话框,曰:“未处理的异常 xxxxxException 发生在 XXXXXX”“其它信息:XXXXX”,点击“继续”后才会转向高亮代码。如果以上两种情况都没有的话,那么就表明高亮显示很可能是你设定的断点了:那行代码的最左边是不是有一个红色的实心圆圈?那个就是断点的标志。再次点击那个红圈就可以取消断点。有时不小心可能会误点到那里误设断点的。
      

  18.   

    当我一个文件都不选择时,就会出现下面的错误:
    未处理的“System.ObjectDisposedException”类型的异常出现在 system.windows.forms.dll 中。其他信息: 无法访问名为“login”的已处置对象。此login是登陆窗体!
      

  19.   

    private void button1_Click(object sender, System.EventArgs e)
    {
    OpenFileDialog swjopenFileDialog=new OpenFileDialog();
    swjopenFileDialog.InitialDirectory="D:\\信息接收/db";
    swjopenFileDialog.Filter="数据库文件|swj.mdb";
    swjopenFileDialog.FileName="swj.mdb";
    swjopenFileDialog.RestoreDirectory=true;
    swjopenFileDialog.CheckFileExists = true;
    swjopenFileDialog.CheckPathExists = true;
    swjopenFileDialog.ValidateNames = true;
    swjopenFileDialog.Multiselect = false; //swjopenFileDialog.FilterIndex=1;
    DialogResult y = swjopenFileDialog.ShowDialog();         // 显示对话框,并保存返回结果
    if (y == DialogResult.OK)                    // 如果用户按的是“确定”按钮
    if(ValiadateFileName(swjopenFileDialog.FileName))     // 验证文件名
    {
    MessageBox.Show("通过");// 验证通过,进行进一步操作
    }
    else
    {
    // 验证失败,提示,取消操作
    MessageBox.Show("请选择User.mdb 文件!");
    }
    else 
    {
    this.Close();
    }





    }
      

  20.   

    在用户没有选择swj.mdb时,文件对话框的“确定”按扭不可用?
    代码应是怎样的呢?
      

  21.   

    runat=server>的控件
    string url=myfile.Value.ToString().Trim();
    if(url==null||url=="")
    {
    Response.Write("<script>alert('请选择文件名!')</script>");
    return;
    }
    System.IO.FileInfo fi=new FileInfo(url);
    string filename=fi.Name.ToString();//取文件名
    string extname=fi.Extension.ToString();//取文件后缀
    if(filename!="swj.mdb")
    {
    Response.Write("<script>alert('请选择您机器上的swj.mdb文件!')</script>");
    return;
    }if(extname!=".mdb"||extname.Length<1)
    {
    Response.Write("<script>alert('数据导入失败,可能是文件格式错误!')</script>");
    return;
    }
    myUrl=Server.MapPath("")+"\\upload"+"\\"+filename;
    myfile.PostedFile.SaveAs(myUrl);.Net 2.0 中可以使用 System.IO.Path.GetFileName(string); 来获取物理路径中的文件名。如果还是 .Net 1.1 的话,可以 这样string swjfileName = swjopenFileDialog.FileName.SubString(swjopenFileDialog.FileNaem.LastIndexOf('\\') + 1);如果是 Url ,就把斜杠反向。private void swjopenFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
    {
                OpenFileDialog ofDlg = new OpenFileDialog();
                ofDlg.ShowReadOnly = false;
                ofDlg.Filter = "数据库文件(swj.mdb)|swj.mdb";;
                ofDlg.Title = "请选择 swj.mdb 文件";
                ofDlg.CheckFileExists = true;
                ofDlg.CheckPathExists = true;
                ofDlg.ValidateNames = true;
                ofDlg.Multiselect = false;
                DialogResult y = ofDlg.ShowDialog();    
                if (y == DialogResult.OK)
                {
                    string fileName = ofDlg.FileName;
                    if(fileName.Contains('\\'))
                        fileName = fileName.SubString(fileName.LastIndexOf('\\'));
                    if(fileName != "swj.mdb")
                    {
                        MessageBox.Show(this, "选择的文件不正确!"); // 提示错误信息。
                        e.Cancel = true; // 取消事件??
                    }
                }
                else e.Cancel = true; //取消事件??
    }OpenFileDialog ofDlg = new OpenFileDialog();
                ofDlg.ShowReadOnly = false;
                ofDlg.Filter = "数据库文件(swj.mdb)|swj.mdb";;
                ofDlg.Title = "请选择 swj.mdb 文件";
                ofDlg.CheckFileExists = true;
                ofDlg.CheckPathExists = true;
                ofDlg.ValidateNames = true;
                ofDlg.Multiselect = false;
                DialogResult y = ofDlg.ShowDialog();    
    这段代码写在buttom_click事件里没问题吧?将
     DialogResult y = ofDlg.ShowDialog();    
                if (y == DialogResult.OK)
                {
                    string fileName = ofDlg.FileName;
                    if(fileName.Contains('\\'))
                        fileName = fileName.SubString(fileName.LastIndexOf('\\'));
                    if(fileName != "swj.mdb")
                    {
                        MessageBox.Show(this, "选择的文件不正确!"); // 提示错误信息。
                        e.Cancel = true; // 取消事件??
                    }
                }
                else e.Cancel = true; //取消事件??
    }private void button1_Click(object sender, System.EventArgs e)
    {
    OpenFileDialog swjopenFileDialog=new OpenFileDialog();
    swjopenFileDialog.InitialDirectory="D:\\信息接收/db";
    swjopenFileDialog.Filter="数据库文件|swj.mdb";
    swjopenFileDialog.FileName="swj.mdb";
    swjopenFileDialog.RestoreDirectory=true;
    swjopenFileDialog.CheckFileExists = true;
    swjopenFileDialog.CheckPathExists = true;
    swjopenFileDialog.ValidateNames = true;
    swjopenFileDialog.Multiselect = false; //swjopenFileDialog.FilterIndex=1;
    DialogResult y = swjopenFileDialog.ShowDialog();         // 显示对话框,并保存返回结果
    if (y == DialogResult.OK)                    // 如果用户按的是“确定”按钮
    if(ValiadateFileName(swjopenFileDialog.FileName))     // 验证文件名
    {
    MessageBox.Show("通过");// 验证通过,进行进一步操作
    }
    else
    {
    // 验证失败,提示,取消操作
    MessageBox.Show("请选择User.mdb 文件!");
    }
    else 
    {
    this.Close();
    }
      

  22.   

    根据你给的异常分析——问题就是那个 this.Close();如果是登陆窗体,直接用 Application.Exit(); 退出应用程序即可。或者可以尝试 this.Dispose(); ……异常代码停留的位置可能不准确。你要禁用“确定”按钮,只能自己写一个打开文件对话框控件……
    不然可能极为复杂
    你可以不设定初始文件名, 
    // swjopenFileDialog.FileName="swj.mdb"; //取消这行
    然后设定
    swjopenFileDialog.CheckFileExists = true;
    这样系统不会允许用户不选择文件点确定。