我用的fileupload上传文件,但是运行时提示 StartIndex不能小于0。(该页面既是增加页面也是修改页面)
代码如下:
        string Fullname = this.FileUpload1.FileName;//获取文件的名称
        int index = Fullname.LastIndexOf(".");
        string vstype = Fullname.Substring(index).ToLower();//取文件的扩展名
        string Type = Fullname.Substring(Fullname.LastIndexOf(".") + 1);  //获得文件的类型,即后缀
        string vsnewname = System.DateTime.Now.ToString("yyyyMMddHHmmssffff");//声称文件名,防止重复
        vsnewname = vsnewname + vstype;//完整的上传文件名
        if (!FileUpload1.HasFile && this.OpsId == -1)//若增加页面时,上传的文件为空
        {
            Response.Write("<script language='javascript'>alert('请选择要上传的文件!');</script>");
            return ds;
        }
         if (FileUpload1.HasFile)
        {
           
            if (Type == "pdf" || Type == "doc" || Type == "xls" || Type == "txt" || Type == "PDF" || Type == "DOC" || Type == "XLS" || Type == "TXT" || Type == "jpg" || Type == "JPG" || Type == "gif" || Type == "bmp" || Type == "rar" || Type == "zip" || Type == "dwg" || Type == "jpg" || Type == "JPG" || Type == "GIF" || Type == "BMP" || Type == "RAR" || Type == "ZIP" || Type == "DWG")
            {
                this.FileUpload1.SaveAs(Server.MapPath("~/Fujian/" + vsnewname));
                dr[ShProductData.PRODES_FIELD] = vsnewname;  //添加页面时  直接赋值
                
            }
            else
            {
                Response.Write("<script language='javascript'>alert('你上传的文件格式有错误!');window.location.href='ProductEdit.aspx';</script>");
                return ds;
            }
        }
        dr[ShProductData.NUMCODE_FIELD] = this.txtNumCode.Text;
        dr[ShProductData.VERSION_FIELD] = this.txtVerSion.Text;
        dr[ShProductData.PRONAME_FIELD] = this.txtProName.Text;
        dr[ShProductData.PROCLASS_FIELD] = int.Parse(this.ddlProClass.SelectedValue);
        dr[ShProductData.KEYWORDS_FIELD] = this.txtKeyWords.Text;
        dr[ShProductData.PRODES_FIELD] = vsnewname;//上传的文件名
        dr[ShProductData.ISWAS_FIELD] = 0;
        dr[ShProductData.BEIZ_FIELD] = this.txtBeiz.Text;
        dr[ShProductData.EXE_FIELD] = Type;//文件后缀
        dr[ShProductData.ADDTIME_FIELD] = this.txtAddTime.Text;
        if (this.OpsId != -1)//更新页面
        {
            dr[ShProductData.ID_FIELD] = this.OpsId;//表示更新数据的 ID
            if (!FileUpload1.HasFile)//若更新页面上没有上传文件
            {
                dr[ShProductData.PRODES_FIELD] = ViewState["file"].ToString(); //原数据列中该文件名
                dr[ShProductData.EXE_FIELD] = ViewState["index"].ToString(); //原数据列中该文件后缀
            }
        }
        ds.Tables[0].Rows.Add(dr);
        return ds;
该页面既是增加页面也是修改页面 如果为增加页面,则必须上传文件,否则提示'请选择要上传的文件”且文件格式要对。若修改页面,想重新上传附件,则相应的文件后缀及上传的文件名为新上传的,若更新页面没有上传文件,则附件仍为原来的 后缀也是原来的。问题就在这,当更新页面没有上传文件时,此时就提示“StartIndex不能小于0”的错误,请问这个问题该如何解决??大家可能会说 在 int index = Fullname.LastIndexOf(".");的后面加个1,但是如果这样的话,保存的附件的名字就不对了,就会变成 ***doc ,而非原来的***.doc 少了个.    请大家帮忙看下 代码如何改?谢谢啊

解决方案 »

  1.   

    你把你这一堆代码
    ----------------------
     string Fullname = this.FileUpload1.FileName;//获取文件的名称 
            int index = Fullname.LastIndexOf("."); 
            string vstype = Fullname.Substring(index).ToLower();//取文件的扩展名 
            string Type = Fullname.Substring(Fullname.LastIndexOf(".") + 1);  //获得文件的类型,即后缀 
            string vsnewname = System.DateTime.Now.ToString("yyyyMMddHHmmssffff");//声称文件名,防止重复
            vsnewname = vsnewname + vstype;//完整的上传文件名 ------------------------
    放到用户选择了上传文件的里面。
    也就是FileUpload1.HasFile为真的时候在去做
      

  2.   

    string Fullname = this.FileUpload1.FileName;
    string fileExtName= Fullname .Substring(Fullname.LastIndexOf(".")+1);
    string strName=Fullname.Substring(Fullname.LastIndexOf("\\")+1);
      

  3.   

    减出负值了,try catch看看