c#读取csv文件不提供有效路径

我似乎无法使用以下连接字符串读取.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 \ Uploads \ countrylist.csv’不是有效路径。 确保路径名拼写正确,并且您已连接到文件所在的服务器。

我确认文件在那里。 这里发生了什么?

好吧,我进一步挖了一下,似乎我的连接字符串是错误的。 对于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中指定文件名。 这是多么奇怪的做法。 它现在对我有用。

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

搜索,你会发现许多(免费)候选人。 这里有一些对我有用:

适用于平面文件的便携式高效通用解析器 (最易于使用,IMO)
快速CSV阅读器 (易于使用,非常适合大型数据集)
FileHelpers库(灵活,包括代码生成器,学习曲线的位)

通常,这些将允许您指定CSV的属性(分隔符,标题,文本限定符等),并通过方法调用将CSV转储到某种数据结构,例如DataTable或List <>。

如果你将使用CSV工作,那么值得查看一个CSV解析器。

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

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

在你的例子中:

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

如果您只是尝试使用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#是微不足道的。

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

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

如果D驱动器是映射的网络驱动器,那么您可能需要使用UNC路径:

 \\computerName\shareName\path\ 

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

CsvReader