我正在尝试将.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);
// }
//}
}
答案 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);
}
* 原因: *为了读取文件,首先我们必须知道文件的位置。文件上传控件没有给出文件位置(由于安全问题)。通过使用文件上传控制,我们可以将文件保存在我们所需的位置。然后通过使用该位置我们可以读取文件。如果您不想保存文件。读取文件后,您可以删除该文件