簡體   English   中英

c#讀取csv文件不提供有效路徑

[英]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解析器

CsvReader

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM