[英]c# reading csv file gives not a valid path
我似乎無法使用以下連接字符串讀取.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解析器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.