2014-02-17 99 views
0

我想將.csv文件上傳到SQL數據庫,按照以下代碼,當我試圖通過將文件路徑分配給變量來讀取.csv文件時我的程序運行良好,但是當我從文件上傳控件中檢索相同的PATH時,我收到了文件未找到異常。 任何人都可以請指導我如何擺脫這個錯誤。提前致謝。從文件上傳控制中讀取.csv文件給出文件未找到異常

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using Microsoft.VisualBasic.FileIO; 
using System.IO; 

public partial class Exercise1 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     if (fupPath.HasFile) 
     { 
      string csv_file_path = @"C:\TechnicalTest\GskTest\Csv\SampleData.csv"; 
      //string csv_file_path = Path.Combine(Server.MapPath("~/File"), fupPath.FileName); 

      DataTable csvData = GetDataTabletFromCSVFile(csv_file_path); 
      Response.Write("Rows count:" + csvData.Rows.Count); 

     } 
    } 

    private static DataTable GetDataTabletFromCSVFile(string csv_file_path) 
     { 
      DataTable csvData = new DataTable(); 
      try 
      { 
       using(TextFieldParser csvReader = new TextFieldParser(csv_file_path)) 
       { 
        csvReader.SetDelimiters(new string[] { "," }); 
        csvReader.HasFieldsEnclosedInQuotes = true; 
        string[] colFields = csvReader.ReadFields(); 
        foreach (string column in colFields) 
        { 
         DataColumn datecolumn = new DataColumn(column); 
         datecolumn.AllowDBNull = true; 
         csvData.Columns.Add(datecolumn); 
        } 
        while (!csvReader.EndOfData) 
        { 
         string[] fieldData = csvReader.ReadFields(); 
         //Making empty value as null 
         for (int i = 0; i < fieldData.Length; i++) 
         { 
          if (fieldData[i] == "") 
          { 
           fieldData[i] = null; 
          } 
         } 
         csvData.Rows.Add(fieldData); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
      } 
      return csvData; 
     } 

    //protected void btnSubmit_Click(object sender, EventArgs e) 
    //{ 
    // if(fupPath.HasFile) 
    // { 
    //  //string csv_file_path = @"C:\TechnicalTest\GskTest\Csv\SampleData.csv"; 
    //  String csv_file_path = Path.Combine(Server.MapPath("~/File"), fupPath.FileName); 
    //  fupPath.SaveAs(csv_file_path); 
    //  //string path = Server.MapPath("~/") 
    //  //String csv_file_path = Server.MapPath(fupPath.FileName).ToString(); 
    //  //csv_file_path = csv_file_path.Replace(@"\\","\""); 

    //  DataTable csvData = GetDataTabletFromCSVFile(csv_file_path); 
    //  Response.Write("Rows count:" + csvData.Rows.Count); 

    // } 
    //} 


} 

回答

0

您需要保存文件第一

if (fupPath.HasFile) 
{ 
    string filename = Path.GetFileName(fupPath.FileName); 
    String csv_file_path = Path.Combine(Server.MapPath("~/File"), filename); 
    fupPath.SaveAs(csv_file_path); 

,然後讀取它

DataTable csvData = GetDataTabletFromCSVFile(csv_file_path); 

在你的註釋代碼Path.Combine(Server.MapPath("~/File"), fupPath.FileName);不會起作用,因爲fupPath.FileName包含完整路徑。

+0

如果我使用fupPath.SaveAs(csv_file_path);我得到DirectoryNotFound異常是由用戶代碼錯誤 – user3230171

0

如果您想讀取本地系統中存在的文件,則需要先將文件保存在所需的位置,然後必須使用該位置讀取該文件。

解決方案:fupPath.SaveAs(csv_file_path);

即;

 if (fupPath.HasFile) 
     { 

     string csv_file_path = Path.Combine(Server.MapPath("~/File"),fupPath.FileName); 
     fupPath.SaveAs(csv_file_path); 
     DataTable csvData = GetDataTabletFromCSVFile(csv_file_path); 
     Response.Write("Rows count:" + csvData.Rows.Count); 

     } 

* 原因: *爲了讀取文件,首先我們要知道上傳的File.File控制的位置,使用不給。到(因爲安全問題)的文件位置文件上傳控制我們可以將文件保存在我們所需的位置。然後通過使用該位置我們可以讀取文件。如果您不想保存文件。讀取文件後,您可以刪除該文件。

+0

unhanded如果我使用fupPath.SaveAs(csv_file_path);我得到DirectoryNotFound異常是由用戶代碼錯誤unfanded – user3230171

+0

您是否創建「文件」文件夾?.else創建它。右鍵單擊網站路徑(目前在soln瀏覽器中,並創建名稱爲「文件」的文件夾) – Ajay