Подтвердить что ты не робот

Чтение 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' не является допустимым путем. Убедитесь, что имя пути написано правильно и что вы подключены к серверу, на котором находится файл.

Я проверил, что файл есть. Что здесь происходит?

4b9b3361

Ответ 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. Какой странный способ сделать это. Теперь он работает для меня.

Ответ 2

Я рекомендую использовать анализатор CSV вместо использования поставщика данных OLEDB.

Поиск, и вы найдете много (свободных) кандидатов. Вот несколько из них, которые работали для меня:

Портативный и эффективный общий парсер для плоских файлов (проще всего использовать, IMO)
Быстрый CSV-ридер (прост в использовании, отлично подходит для больших наборов данных)
FileHelpers библиотека (гибкая, включает в себя генераторы кода, бит кривой обучения)

Обычно они позволят вам указать свойства вашего CSV (разделитель, заголовок, разделитель текста и т.д.), а при вызове метода ваш CSV будет сбрасываться в какую-либо структуру данных, такую ​​как DataTable или List < > .

Если вы будете работать с CSV, стоит проверить парсер CSV.

Ответ 3

Способ комбинирования путей и имен файлов заключается в использовании:

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

в вашем примере:

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

Ответ 4

Если вы просто пытаетесь прочитать CSV файл с С#, проще всего использовать класс Microsoft.VisualBasic.FileIO.TextFieldParser. Он фактически встроен в .NET Framework, вместо того, чтобы быть сторонним расширением.

Да, он находится в Microsoft.VisualBasic.dll, но это не значит, что вы не можете использовать его с С# (или любым другим языком 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, но было бы тривиально перевести его на С#.

Ответ 5

У меня была та же проблема несколько недель назад, пытаясь сделать некоторую автоматизацию Office 2007 и потратив слишком много времени, пытаясь ее исправить.

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

Ответ 6

Если диск D является подключенным сетевым диском, вам может понадобиться использовать UNC-путь:

\\computerName\shareName\path\

Ответ 7

попробуйте это, Fast CSV Reader, эффективный синтаксический анализатор CSV

CsvReader