2009-06-20 12 views
0

In meiner ASP.NET MVC-Website muss ich eine TXT-Datei mit einigen Namen und E-Mails lesen, die durch ';' getrennt sind. Danach muss ich jede Zeile dieser TXT-Datei in der Datenbank speichern.Wie kann ich den vollständigen Dateipfad in C# 3.0 hochladen?

Umhergucken, habe ich einige Schnipsel gefunden, aber in allen von ihnen muss ich den txt Dateipfad verwenden.

Aber wie kann ich diesen Pfad bekommen? Diese Datei könnte irgendwo auf dem Computer eines Benutzers sein!

Danke !!

+0

Ist dies für eine ASP.NET-Website? – heavyd

+0

ASP.NET MVC, heavyd. – AndreMiranda

+0

@Jacob - Der Benutzer wählt eine TXT-Datei und wenn er auf eine bestimmte Schaltfläche klickt, wird eine Aktion aufgerufen. In dieser Aktion muss ich alle Daten dieser TXT-Datei lesen und in der Datenbank speichern. – AndreMiranda

Antwort

4

Sie können nicht den vollständigen Pfad einer hochgeladenen Datei abrufen. Dies wäre ein Datenschutzverstoß für den Benutzer, der die Datei hochgeladen hat.

Stattdessen müssen Sie die Request.Files lesen, die hochgeladen wurden. Zum Beispiel:

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, danke! Ich ging schon in diese Richtung! :-) Es spart in der Datenbank, aber jetzt habe ich Probleme mit Sonderzeichen wie "'", "~' und anderen. – AndreMiranda

+0

Ich habe vergessen, die Codierung zu verwenden !! Danke für alles! – AndreMiranda

1

Wenn Sie auf einem Asp.net-Webseitenmodell sind, dann funktioniert Server.MapPath("~/"), um den Stamm der Website zu erhalten, so übergeben Sie den Pfad, den Sie benötigen. Sie könnten

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

Zum Beispiel kann ein Ordner, in dem die Textdateien gespeichert werden aufrufen müssen:

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

Um nur lesen von ihm, wenn Sie es haben Sie können es Stream:

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()); 
    } 
} 

Wenn dies für eine Desktop-Anwendung gilt, enthält die Applcation-Klasse alle diese Informationen:

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

Application.StartupPath 

Alle Objekte aufzulisten andere appdata Ordner und Sachen, aber wenn Sie die Anwendung Pfad der ausführbaren Datei haben, das gibt Ihnen Kontext wie Application.LocalUserAppDataPath.

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

Wenn der Inhalt klein genug ist, können Sie auch einfach speichern in einem HashTable oder einem generischen List<String> vor als auch auf der Datenbank zu speichern.

+0

Hallo Ryan! Ich muss die TXT-Datei nicht wirklich speichern. Ich muss nur seinen Inhalt lesen und es in der Datenbank speichern – AndreMiranda

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

das Formular im HTML sollte enctype="mulitipart/form-data"

Verwandte Themen