导致类似代码错误的原因

本文关键字:错误 代码 | 更新日期: 2023-09-27 18:28:05

我有以下代码可以从简历中提取姓名。请参阅下面的代码:

public void name(string str1)
        {
            try
            {
                Microsoft.Office.Interop.Word.ApplicationClass Application = new Microsoft.Office.Interop.Word.ApplicationClass();
                object nullobj = System.Reflection.Missing.Value;
                string a = Server.MapPath("/resumes/" + fileUpload1.FileName);
                fileUpload1.SaveAs(Server.MapPath("/resumes/" + fileUpload1.FileName));
                object file = Server.MapPath("/resumes/" + fileUpload1.FileName);
                Microsoft.Office.Interop.Word.Document doc = Application.Documents.Open(ref file, ref nullobj, ref nullobj,
                                                  ref nullobj, ref nullobj, ref nullobj,
                                                  ref nullobj, ref nullobj, ref nullobj,
                                                  ref nullobj, ref nullobj, ref nullobj,
                                                  ref nullobj, ref nullobj, ref nullobj, ref nullobj);
                doc.Activate();
                string Doc_Content = doc.Content.Text;
                string str = Doc_Content;
                var words = str.Split(new char[] { ' ', ':', ''r', ''t' });
                for (int i = 0; i < words.Length; i++)
                {
                    string val1 = words[i].ToString();
                    val1 = val1.ToLower();
                   // string val2 = "";
                    //if (val1 != "resume")
                    //{
                    //    //i = i + 1;
                    //    string val3 = words[i].ToString();
                    //    string val4 = "";
                    //    int result = string.Compare(val3, val4, true);
                    //    if (result != 0)
                    //    {
                    //        if (j == 0)
                    //        {
                    //            string val5 = words[i].ToString();
                    //            j++;
                    //            if (words[i + 1].ToString() != "")
                    //            {
                    //                TextBox1.Text = words[i].ToString() + " " + words[i + 1].ToString();
                    //                //txtLastName.Text = words[i + 1].ToString();
                    //                doc.Close(ref nullobj, ref nullobj, ref nullobj);
                    //                return;
                    //            }
                    //            else
                    //            {
                    //                //txtLastName.Text = words[i + 2].ToString();
                    //                doc.Close(ref nullobj, ref nullobj, ref nullobj);
                    //                return;
                    //            }
                    //        }
                    //    }
                    //}

//start here

                    if (words[i].ToString().ToLower() == "resume")
                    {
                        string val3 = words[i + 1].ToString();
                        string val4 = words[i + 2].ToString();
                        TextBox1.Text = val3 + " " + val4; doc.Close(ref nullobj, ref nullobj, ref nullobj);
                        return;
                    }
                    else if (words[i].ToString().ToLower() == "curriculum")
                    {
                        if (words[i + 1].ToString().ToLower() == "vitae")
                        {
                            string val3 = words[i + 2].ToString();
                            string val4 = words[i + 3].ToString();
                            TextBox1.Text = val3 + " " + val4; doc.Close(ref nullobj, ref nullobj, ref nullobj);
                            return;
                        }
                    }
                    else
                    {
                        string val3 = words[i].ToString();
                        string val4 = words[i + 1].ToString();
                        TextBox1.Text = val3 + " " + val4; doc.Close(ref nullobj, ref nullobj, ref nullobj);
                        return;
                    }     
                }
 //end here
                doc.Close(ref nullobj, ref nullobj, ref nullobj);
            }
            catch (Exception)
            {
            }
        }

上面代码的问题是,它会生成一些错误消息,如下面的消息:-

进程无法访问文件"C:''Users''Roshan''Documents''Visual"Studio 2012''Projects''HRMS''HRMS''resumes''Roshan.doc,因为它正在被另一个过程使用。

描述:在执行期间发生未处理的异常当前web请求。请查看堆栈跟踪以了解更多信息有关错误的信息以及错误在代码中的来源。

异常详细信息:System.IO.IOException:进程无法访问文件"C:''Users''Roshan''Documents''Visual Studio"2012''Projects''HRMS''HRMS''resumes''Roshan.doc,因为它正在使用通过另一个过程。

来源错误:

第73行:{第74行:字符串路径=Server.MapPath(Request.ApplicationPath)+"/resumes/"+fileUpload1.FileName;第75行:
fileUpload1.SaveAs(路径);第76行:第77行:
fileUpload1.SaveAs(Server.MapPath("~/resumes/"+filename));

如果我取消注释当前已注释的行,并在"从这里开始"answers"从这里结束"之间对代码进行注释,则代码运行良好。为什么会这样?

导致类似代码错误的原因

有多个路径允许您的代码在不到达doc.close语句的情况下运行一次。因此,第二次调用可能会触发您得到的异常。

你能试着把doc.close语句放在finally块里吗(这是一个很好的做法)?