2013-08-07 16 views
9

Ich habe ein vollständiges Projekt erstellt, das perfekt funktioniert. Mein Problem betrifft das Setup-Projekt. Wenn ich es auf einem anderen Computer verwende, kann die Textdatei nicht gefunden werden, selbst wenn sie sich während der Bereitstellung im Ressourcenordner befinden!Lesen einer eingebetteten Textdatei

Wie kann ich sicherstellen, dass mein Programm diese Textdateien nach der Installation der Software auf einem anderen Computer findet!

Ich habe nach dieser Lösung gesucht, aber vergebens. Bitte hilf mir, das zu klären. Wenn ich einen vollen Code bekomme, der das tut, werde ich sehr glücklich sein!

+2

Bitte geben Sie weitere Informationen. Welche IDE verwendest du? Welche Art von Projekt ist das? Wie haben Sie die Textdatei in den Ressourcenordner aufgenommen? Welche Buildoptionen haben Sie für die Textdatei festgelegt? –

+0

Im mit C#. Es ist ein Projekt, das so viele Textdateien enthält und die Art und Weise, wie ich diese Dateien lese, ist, dass ich eine Datei öffne und nur den Trank der Datei lese, die ich will. Das bedeutet, dass ich manchmal Zeilen innerhalb dieser Datei überspringen kann, je nachdem, was ich will. Ich habe diese Dateien (69 Textdateien) in das Ressourcenverzeichnis aufgenommen. also nach dem deployment möchte ich bei einer installation das setup auf einem anderen computer, mein programm in der lage sein diese dateien zu lesen! Ich kämpfe wirklich! Ich möchte einen vollständigen Code dafür. –

+0

Sie schreiben in C#, aber sagen uns, welche IDE Sie verwenden, (Visual Studio wäre meine erste Wette, wenn nicht MonoDevelop) würde uns helfen, Ihnen zu sagen, wie Sie Ihre Build-Aktionen konfigurieren. –

Antwort

2

Angenommen, Sie bedeuten, dass Sie eine Datei in Ihrem Projekt haben, die Sie als EmbeddedResource festgelegt haben, die Sie wollen

using (var stream = Assembly.GetExecutingAssembly() 
    .GetManifestResourceStream(path)) 
{ 
    ... 
} 

wo path die Assemblierung-Name durch den relativen Pfad zur Datei in die befolgt werden sollten, Projektordnerhierarchie. Als Trennzeichen wird der Zeitraum . verwendet.

Also, wenn Sie eine Assembly namens MyCompany.MyProject haben und dann in diesem Projekt, das Sie haben einen Ordner Test enthält Image.jpg, würden Sie den Pfad verwenden MyCompany.MyProject.Test.Image.jpg ein Stream dafür zu bekommen.

+0

vielen Dank. Es hat mir geholfen. – Vikram

22

Zuerst die Build-Aktion der Textdatei auf "EmbeddedResource" setzen.

dann die Datei in Ihrem Code zu lesen:

var assembly = Assembly.GetExecutingAssembly(); 
var resourceName = "AssemblyName.MyFile.txt"; 

using (Stream stream = assembly.GetManifestResourceStream(resourceName)) 
{ 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     string result = reader.ReadToEnd(); 
    } 
} 

Wenn Sie nicht den Namen der eingebetteten Ressource herauszufinden, können dies mit dem Namen zu finden, und es sollte klar sein, welche Dateien sind:

assembly.GetManifestResourceNames(); 

Dies setzt voraus, dass die Textdatei in die Assembly eingebettet werden soll. Wenn nicht, möchten Sie vielleicht nur Ihr Setup-Projekt ändern, um die Textdatei während der Installation einzuschließen.

+0

und was ist der AssemblyName in diesem Fall? innerhalb "AssemblyName.MyFile.txt". –

+1

Das Festlegen der Build-Aktion der Textdatei auf "EmbeddedResource" ist der Schlüssel. Vielen Dank. –

+0

Also @MoloraneMothusi, ist dies die akzeptierte Antwort? Wenn ja, bitte als solches markieren. :) –

1

diese Funktion schaffen, was eingebettete Ressource Textdatei, die Sie haben zu lesen:

public string GetFromResources(string resourceName) 
{ 
    Assembly assem = this.GetType().Assembly; 

    using (Stream stream = assem.GetManifestResourceStream(resourceName)) 
    { 
     using (var reader = new StreamReader(stream)) 
     { 
      return reader.ReadToEnd(); 
     } 

    } 
} 
+0

Wie ist das nicht nur eine Kopie von dem, was bereits 7 Minuten vorher geschrieben wurde? –

+0

sah nicht einmal Ihre Post Timothy (ich denke, Sie sagten dies wegen Ihrer Post), ich erstelle eine Methode für die OP abrufen Sie alle Text-Datei in Ressourcen, da dies keine Kopie von Ihnen ist, tut mir leid, wenn ich Sie oder sonst ist es nicht mein Wunsch, das war keine Kopie. – terrybozzio

+1

Mach dir keine Sorgen. Nichts ist falsch, solange es nicht beabsichtigt war. –