0

我正在尝试将文件导入功能添加到将从本地 C: 驱动器导入 CSV 文件的管理网页

我刚刚意识到string filePath = Path.GetFileName(FileUpload1.FileName);实际上并不允许读取客户端路径,而只提供文件名。

protected void btnImportData_Click(object sender, EventArgs e)
{
  List<CSVFile> entries = new List<CSVFile>();

  string filePath = Path.GetFileName(FileUpload1.FileName);
  using (TextFieldParser parser = new TextFieldParser(filePath))
  {

    //Other code
  }

}

目前该行TextFieldParser parser = new TextFieldParser(filePath)给出错误,因为我无法获得 CSV 的完整路径。

是否可以将的内容加载FileUpload1到变量中parser?我可以看到控件有内容,但不确定如何或是否可能?

4

2 回答 2

2

考虑到该文件尚未存储在服务器上,因此没有路径。FileName就是这样:文件名而不是完整路径。

如果您需要文件存在于文件系统上才能解析它,您需要先保存它。

于 2013-05-31T15:46:18.227 回答
2

FileName属性只是浏览器发送的文件名,尚未物理存储在服务器上。为此,您需要先保存它:

string filePath = String.Format({0}{1}", System.IO.Path.GetTempPath(), FileUpload1.FileName); // Save to temp directory
FileUpload1.SaveAs(filePath);
using (TextFieldParser parser = new TextFieldParser(filePath))
{
  //...
}
File.Delete(filePath); // Delete the file if you're done with it

此外,如果TextFieldParser可以接受 a System.IO.Stream,您甚至不需要先将文件保存到磁盘:

using (TextFieldParser parser = new TextFieldParser(FileUpload1.FileContent)) // Read stream
{
  //...
}
于 2013-05-31T15:48:55.480 回答