c# lecture du fichier csv donne pas un chemin d'accès valide
Je n'arrive pas à lire .fichier csv à l'aide de la chaîne de connexion suivante:
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();
Il donne l'erreur suivante:
'D:\arrgh\arrgh\Uploads\countrylist.csv" n'est pas un chemin d'accès valide. Assurez-vous que le chemin d'accès est correct et que vous êtes connecté sur le serveur sur lequel réside le fichier.
J'ai vérifié que le fichier est là. Ce qui se passe ici?
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai creusé un peu plus et il semble que ma chaîne de connexion est mauvaise. Avec des fichiers CSV, vous ne spécifiez pas le nom réel du fichier, mais le répertoire où il appartient, par exemple.
Et que vous spécifiez le nom de fichier dans le SelectCommand. Quelle étrange façon de faire. Cela fonctionne pour moi maintenant.
sql = SELECT * FROM myfile.csv
(c'est à dire le nom de fichier sans le chemin d'accès). Vous pouvez extraire le fichier dans le chemin d'accès complet à l'aide decsvFile = Right(csvPath, Len(csvPath) - InStrRev(csvPath, "\"))
Path.GetFileName(csvPath)
Je vous recommande d'utiliser un fichier CSV analyseur plutôt que d'utiliser le fournisseur de données ole db.
De recherche et vous trouverez beaucoup d' (gratuit) les candidats. Voici quelques qui a fonctionné pour moi:
Un portable et efficace générique analyseur syntaxique pour les fichiers plats (plus facile à utiliser, OMI)
Un Rapide CSV Reader (facile à utiliser, idéal pour les grands ensembles de données)
FileHelpers bibliothèque (souple, comprend des générateurs de code, peu d'une courbe d'apprentissage)
Généralement, elles vous permettent de spécifier les propriétés de votre fichier CSV (séparateur, en-tête, qualificateur de texte, etc.) et avec un appel de la méthode de votre fichier CSV est vidée dans une structure de données de quelque sorte, comme une Table ou d'une Liste<>.
Si vous allez travailler avec CSV, il vaut la peine de vérifier un fichier CSV analyseur.
La manière de combiner les chemins et noms de fichiers est d'utiliser:
dans votre exemple:
System.IO.Path
des fonctions d'assistance. Sinon, il y aura toujours qu'un bord de cas qui vous pique.Si vous êtes juste essayer de lire un fichier CSV avec C#, la chose la plus facile est d'utiliser le Microsoft.VisualBasic.FileIO.TextFieldParser classe. C'est en fait intégré dans la .NET Framework, au lieu d'être une extension tierce.
Oui, c'est dans
Microsoft.VisualBasic.dll
, mais cela ne signifie pas que vous ne pouvez pas l'utiliser à partir de C# (ou tout autre langage CLR).Voici un exemple d'utilisation, pris de la La documentation MSDN:
Encore une fois, cet exemple est en VB.NET mais il serait trivial de le traduire en C#.
J'ai eu le même problème il y a quelques semaines à essayer de faire quelque Office 2007 automatisation et passé trop de temps à essayer de le réparer.
Si le disque D est un lecteur réseau mappé, alors vous pouvez avoir besoin d'utiliser le chemin d'accès UNC:
essayer cela, Un Rapide CSV Reader, efficace CSV analyseur
CsvReader