我想选择一个存储了很多个号码的文本文件,让后点导入按钮即可将文本文件中的所有号码都加入到id为MobileNum的文本域中来,在本机测试没有任何问题,但是如果上传到服务器上的话就会出现错误,错误提示如下: 
未能找到路径“E:\号码\号码1.txt”的一部分。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.DirectoryNotFoundException: 未能找到路径“E:\号码\号码1.txt”的一部分。源错误: 
行 251:            if (fileExtName == "txt" || fileExtName == "TXT")
行 252:            {
行 253:                StreamReader fileStream = new StreamReader(txtFilePath, Encoding.Default);
行 254:                string txtStr = fileStream.ReadToEnd();
行 255:                fileStream.Close();
 源文件: e:\web\html\web\Send.aspx.cs    行: 253 堆栈跟踪: 
[DirectoryNotFoundException: 未能找到路径“E:\号码\号码1.txt”的一部分。]
   System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +2001792
   System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +998
   System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) +115
   System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize) +85
   System.IO.StreamReader..ctor(String path, Encoding encoding) +16
   SendSms.btngetnum_Click(Object sender, EventArgs e) in e:\web\html\web\Send.aspx.cs:253
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5087
页面代码是这样的:<asp:FileUpload ID="fuFile" runat="server" />
<asp:Button ID="btngetnum" runat="server" class="button" Text="导入号码" OnClick="btngetnum_Click" />
<textarea  runat="server" rows="2" cols="20" id="MobileNum" class="sendnumber" ></textarea>
后台按钮事件代码如下: //导入文本文件的按钮事件    protected void btngetnum_Click(object sender, EventArgs e)
    {
        if (fuFile.HasFile)
        {
            string txtFilePath = fuFile.PostedFile.FileName;
            string fileExtName = txtFilePath.Substring(txtFilePath.LastIndexOf(".") + 1, 3);
            if (fileExtName == "txt" || fileExtName == "TXT")
            {
                StreamReader fileStream = new StreamReader(txtFilePath, Encoding.Default);
                string txtStr = fileStream.ReadToEnd();
                fileStream.Close();
                txtStr = txtStr.Replace("\r\n", ",");
                this.MobileNum.Value = txtStr;            }
            else
            {
                Response.Write("<script>alert('选取文件格式" + fileExtName + "错误!请上传txt文件!')</script>");
            }
        }
        else
        {
            Response.Write("<script>alert('请先选择存储号码的txt文本文件!')</script>");
        }
    }
请大家指点一下   应该怎么写才行了?

解决方案 »

  1.   

    你上传控件的文件地址是指客户端的文件 当你客户端和WEB服务器在同一台机器上时有效 否则无效(服务器上没有这个文件)解决的方法是:1 先上传到服务器再读 2 通过JS读(由于IE安全限制一般这是不允许的)
      

  2.   

    同意楼上的,你必须先用fuFile.SaveAs方法将文件上传到服务器上,然后再读,所以你必须先指定一个服务器上的绝对地址。
      

  3.   

    E:\号码\号码1.txt明显是找不到这个文件
      

  4.   

    这fuFile应该是个上传控件对象 在你的代码里没看到fuFile.PostedFile.SaveAs的动作
      

  5.   

    server.mapPath ("路径")  很明显是你的路径问题 。E:\号码\号码1.txt  这是你的本地地址 ,你都上传到服务器了 难道你的服务器上也有E:\号码\号码1.txt?
      

  6.   

    file:///E:\\号码\\号码1.txt路径错误 。
      

  7.   

    你用的StreamReader fileStream = new StreamReader(txtFilePath, Encoding.Default);
    方法中的第一个参数是寻找服务器上虚拟目录中的路径或文件, 而你在这很明显是读取的输入框中的文件路径,在服务器上找不到的,直接用server.mapPath 先去重新定位下你的文件路径。