2016-08-26 4 views
1

Meine Weblösung hat eine Reihe von Projekten.Lesen von einer Datei, die nicht im Startprojekt gefunden wurde

  • Das Startup-Projekt heißt: "Bob"
  • "Bob" hat einen Verweis auf "Gill" Projekt.
  • Innerhalb "Gill", gibt es eine Datei innerhalb, die ich lesen möchte. "Gill/One/Two/hi.txt"

Ich habe einige Code in Bob, dass einige Code innerhalb des "Gill" Projekt aufruft, die die oben txt-Datei zuzugreifen versucht:

File.ReadAllText(@"~/One/Two/hi.txt") 

Das findet die Datei nicht.


ich markiert die Datei bauen, wie

Inhalt

ich kopieren Ausgabeverzeichnis als markiert haben:

Kopieren wenn neuer

Was ist der Zugang zum Zugriff auf die Datei?

+0

Um Zugriff auf die Datei zu erhalten, müssen Sie sie in das ausführbare Startup-Projektverzeichnis kopieren oder einen Pfad in Ihrer Konfiguration speichern, der auf das Verzeichnis verweist, in dem sich die Datei befindet. Alternativ können Sie sie als Ressource einbetten und auf diese Weise zugreifen . Alle Anforderungen Ihres Startprojekts sind eine Referenz auf die DLL, die das andere Projekt ausgibt, sodass keine zusätzlichen Inhaltsdateien angezeigt werden. "Copy if neuher" kopiert nur in ein Verzeichnis relativ zum aktuellen Projekt. Ich hatte vorher Lösungen, die ein dediziertes "Ressourcen" -Projekt hatten, dessen Aufgabe es war, die Assets an der richtigen Stelle zu veröffentlichen. – Charleh

+0

@Charleh dies gibt mir Zugriff auf die DLL. Assembly.GetExecutingAssembly() 'Was nun? – Jimmyt1988

Antwort

0

Wenn Sie die Datei festgelegt haben, um Ausgabeverzeichnis zu kopieren, wird diese im Verzeichnis ist Ihre Anwendung sein.

Igor Ändern beantworten leicht, Sie

tun konnte
var root = System.Web.Hosting.HostingEnvironment.MapPath("~/bin"); 
var filePath = System.IO.Path.Combine(root, "One", "Two", "hi.txt"); 
if(System.IO.File.Exists(filePath)) { 
    var allText = System.IO.File.ReadAllText(filePath); 
} 

, die das bin Verzeichnis für Ihre Anwendung aufgelöst wird, in dem Sie Ihre Datei verwurzelt werden.

1

try Dateipfad als

var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin\\One\\Two\\hi.txt"); 

bekommen erlaubt werden Und Set Build Aktion: keine

kopieren Ausgabe: Kopieren Sie immer (oder kopieren, wenn neuere)

+0

"Es konnte kein Teil des Pfades gefunden werden. C: \\ One \\ Two \\ hi.txt '." – Jimmyt1988

+0

Ich machte ein Update jimmy, es war wegen des Schrägstrichs am Anfang, denke ich. – mecek

0

Sie müssen

  1. Sicherstellen, dass die Datei auf Ihrer Website kopiert wurde. Du kannst nicht davon lesen, wenn es nicht existiert.
  2. Stellen Sie den Dateipfad korrekt zusammen. Der ausführende Code weiß nicht direkt über ~ als Pfadzeichen, Sie müssen das in einen Stammpfad der Website für alle Typen im System.IO Namensraum wie File oder Path übersetzen. Der beste Weg, dies zu tun, ist HostingEnvironment zu verwenden.

Code:

var root = System.Web.Hosting.HostingEnvironment.MapPath("~"); 
var filePath = System.IO.Path.Combine(root, "One", "Two", "hi.txt"); 
if(System.IO.File.Exists(filePath)) { 
    var allText = System.IO.File.ReadAllText(filePath); 
} 

Dateien als Inhalt markiert und in außerhalb Projekten verweist kopiert (die durch das Web-Projekt wiederum referenziert sind) ihre Inhalte kopiert, bezogen auf den bin Ordner der Webanwendung .In diesem Fall fügen Sie bin an den Root-Pfad wie folgt:

var root = System.Web.Hosting.HostingEnvironment.MapPath("~/bin"); 
+0

Dieser Code versucht, in das "Bob" -Verzeichnis (Startprojekt) und nicht in das "Gill" -Verzeichnis (das Projekt, in dem die Datei gespeichert ist) zu suchen. – Jimmyt1988

+0

@ Jimmyt1988 - Alles ist relativ zur Stammwebanwendung. Wenn Sie also eine Datei in einem anderen Projekt haben, das Sie einschließen möchten, sollte sie relativ zum Veröffentlichungspfad (Web-App) enthalten sein. Erstellen Sie Ihren Weg von diesem Punkt aus, da die Web-Anwendung kein Konzept von Projekten (Gill/Bob) hat, eine Lösung, die ein reines Visual Studio-Konzept ist. – Igor

+0

Ich verstehe das, aber ich möchte die Datei in meinem Projekt existieren. Deshalb frage ich mich, wie ich die Datei beim Ausführen der Anwendung aufrufen kann. Ich dachte, Kopie zu Ausgabe sollte dabei helfen. Wenn Sie es in das Ausgabeverzeichnis einfügen, können Sie die Datei abrufen. – Jimmyt1988

Verwandte Themen