2009-06-20 11 views
0

Dans mon site Web ASP.NET MVC, je dois lire un fichier txt avec des noms et des courriels séparés par ';'. Après cela, je dois enregistrer chaque ligne de ce fichier txt à la base de données. En recherchant, j'ai trouvé quelques extraits, mais dans tous, je dois utiliser le chemin du fichier txt.Comment puis-je obtenir le chemin complet du fichier téléchargé en C# 3.0?

Mais, comment puis-je obtenir ce chemin? Ce fichier pourrait être n'importe où dans la machine d'un utilisateur!

Merci!

+0

Est-ce pour un site ASP.NET? – heavyd

+0

ASP.NET MVC, heavyyd. – AndreMiranda

+0

@Jacob - L'utilisateur choisira un fichier txt et lorsqu'il cliquera sur un bouton donné, une action sera appelée. Dans cette action, je dois lire toutes les données de ce fichier txt et les enregistrer dans la base de données. – AndreMiranda

Répondre

4

Vous ne pouvez pas obtenir le chemin complet d'un fichier téléchargé. Ce serait une violation de la vie privée pour l'utilisateur qui a téléchargé le fichier. Au lieu de cela, vous devrez lire les fichiers Request.Files qui ont été téléchargés. Par exemple:

HttpPostedFile file = Request.Files[0]; 
using (StreamReader reader = new StreamReader(file.InputStream)) 
{ 
    while ((string line = reader.ReadLine()) != null) 
    { 
     string[] addresses = line.Split(';'); 
     // Do stuff with the addresses 
    } 
} 
+0

Jacob, merci! Je me dirigeais déjà dans cette direction! :-) Il enregistre à la base de données, mais maintenant j'ai des problèmes avec des caractères spéciaux tels que "'", "~' et d'autres – AndreMiranda

+0

J'ai oublié d'utiliser l'encodage !! Merci pour tout! – AndreMiranda

1

Si vous êtes sur un modèle de page web asp.net alors Server.MapPath("~/") fonctionne pour obtenir la racine du site afin de passer le chemin dont vous avez besoin. Vous devrez peut-être appeler

HttpContext.Current.Server.MapPath("~/"); 

Par exemple, un dossier dans lequel les fichiers texte sont enregistrés:

string directoryOfTexts = HttpContext.Current.Server.MapPath("~/txtdata/"); 

Pour tout lire de lui une fois que vous l'avez, vous pouvez StreamReader il:

string directoryOfTexts = HttpContext.Current.Server.MapPath("~/txtdata/"); 
string path = directoryOfTexts + "myfile.txt"; 
string alltextinfile = ""; 
if (File.Exists(path)) 
{ 
    using (StreamReader sr = new StreamReader(path)) 
    { 
     //This allows you to do one Read operation. 
     alltextinfile = sr.ReadToEnd()); 
    } 
} 

S'il s'agit d'une application de bureau, la classe Applcation contient toutes ces informations:

http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath.aspx

Application.StartupPath 

Toutes les propriétés liste des autres dossiers AppData et tout ça, mais une fois que vous avez le chemin d'application à l'exécutable que cela vous donne le contexte tel que Application.LocalUserAppDataPath.

http://msdn.microsoft.com/en-us/library/system.windows.forms.application_properties.aspx

Si le contenu est assez petit, vous pouvez aussi simplement les enregistrer dans un HashTable ou un List<String> générique avant l'enregistrement dans la base de données ainsi.

+0

Salut Ryan! Je n'ai pas vraiment besoin de sauvegarder le fichier txt. J'ai juste besoin de lire son contenu et l'enregistrer dans la base de données – AndreMiranda

0
var hpf = Request.Files[file] as HttpPostedFile; 

le formulaire dans le code HTML devrait avoir enctype="mulitipart/form-data"