从文件上载控件读取.csv文件会出现File not found异常

时间:2014-02-17 02:23:33

标签: c# asp.net csv

我正在尝试将.csv文件上传到SQL数据库,按照我下面的代码,当我尝试通过将文件PATH分配给变量来读取.csv文件我的程序运行正常,但是当我检索相同的PATH时从文件上传控件我得到文件未找到异常。 任何人都可以指导我如何摆脱这个错误。提前谢谢。

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);

    //    }
    //}


}

2 个答案:

答案 0 :(得分: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包含完整路径。

答案 1 :(得分: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);

       }

* 原因: *为了读取文件,首先我们必须知道文件的位置。文件上传控件没有给出文件位置(由于安全问题)。通过使用文件上传控制,我们可以将文件保存在我们所需的位置。然后通过使用该位置我们可以读取文件。如果您不想保存文件。读取文件后,您可以删除该文件