C#阅读csv文件没有给出一个有效的路径(c# reading csv file gives not

2019-07-18 22:33发布

我似乎无法使用下面的连接字符串来读取.csv文件:

var fileName = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "Uploads\\countrylist.csv");
string connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""text;HDR=YES;FMT=Delimited""", fileName);
OleDbConnection oledbConn = new OleDbConnection(connectionString);
oledbConn.Open();

它提供了以下错误:

'd:\ arrgh \ arrgh \上传\ countrylist.csv' 不是一个有效的路径。 确保路径名称正确并且您连接到该文件所在的服务器拼写。

我核实,该文件是存在的。 这是怎么回事吗?

Answer 1:

好吧,我挖了一个远一点,似乎我的连接字符串是错误的。 使用CSV文件,不指定实际文件名,但它所属的目录,例如。

var fileName = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "Uploads\\");
string connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""text;HDR=YES;FMT=Delimited""", fileName);
OleDbConnection oledbConn = new OleDbConnection(connectionString);
oledbConn.Open();
var cmd = new OleDbCommand("SELECT * FROM [countrylist.csv]", oledbConn);

并指定在SelectCommand中的文件名。 什么做的一种奇怪的方式。 它现在是为我工作。



Answer 2:

我建议你使用一个CSV解析器,而不是使用OLEDB数据提供程序。

搜索,你会发现许多(免费)候选人。 这里是为我工作的几个:

对于平面文件的便携式和高效的通用解析器 (最容易使用,IMO)
快速CSV读卡器 (易于使用,非常适合大型数据集)
FileHelpers库(柔性的,包括代码发生器,一个学习曲线的位)

典型地,这些将允许您指定CSV(定界符,标头,文本限定符等)的特性,并用方法打电话给你的CSV被转储到某种,数据的结构,例如一个DataTable或列表<>。

如果您要使用CSV在所有的工作,这是值得一试一个CSV解析器。



Answer 3:

为路径和文件名的组合方式是使用:

fullFilename = System.IO.Path.Combine(folderfilepath, Filename);

在您的示例:

var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Uploads\countrylist.csv");


Answer 4:

如果你只是想读取与C#的CSV文件,最简单的办法就是使用Microsoft.VisualBasic.FileIO.TextFieldParser类。 它实际上是建立在.NET Framework中,而不是作为一个第三方扩展。

是的,它是在Microsoft.VisualBasic.dll ,但是,这并不意味着你不能从C#(或任何其他CLR语言)使用它。

下面是使用的例子,取自MSDN文档 :

Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\testfile.txt")
   MyReader.TextFieldType = FileIO.FieldType.Delimited
   MyReader.SetDelimiters(",")
   Dim currentRow As String()
   While Not MyReader.EndOfData
      Try
         currentRow = MyReader.ReadFields()
         Dim currentField As String
         For Each currentField In currentRow
            MsgBox(currentField)
         Next
      Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
      MsgBox("Line " & ex.Message & _
      "is not valid and will be skipped.")
      End Try
   End While
End Using

同样,这个例子是VB.NET,但它是微不足道将其翻译为C#。



Answer 5:

我有同样的问题在几个星期前试图做一些Office 2007的自动化,花了太多时间试图修复它。

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";


Answer 6:

如果d驱动器映射网络驱动器,那么你可能需要使用UNC路径:

\\computerName\shareName\path\


Answer 7:

试试这个,快速CSV阅读器,高效的CSV解析器

CsvReader



文章来源: c# reading csv file gives not a valid path
标签: c# csv oledb