2013-03-30 18 views
17

Ich muss eine Datei aus meinen Ressourcen lesen und sie zu einer Liste hinzufügen. mein Code:Textdatei von C# -Ressourcen lesen

private void Form1_Load(object sender, EventArgs e) 
{ 
    using (StreamReader r = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.myText.txt"))) 
    { 
     //The Only Options Here Are BaseStream & CurrentEncoding 
    } 
} 

Ive für diese gesucht und nur bekommen Antworten haben wie "Assembly.GetExecutingAssembly...." aber mein Programm tut haben die Möglichkeit, Versammlung.?

+1

Haben Sie 'using System.Reflection;' oben auf Ihrer Seite hinzugefügt? – keyboardP

+1

Welches Problem haben Sie? – Patrick

+0

Ich lese das wird funktionieren 'New StreamReader (Assembly.GetExecutingAssembly.GetNamedResourceStream (" [Programm Namespace] .Thresh Dress.txt ")' – Dobz

Antwort

29

versuchen, etwas wie folgt aus:

string resource_data = Properties.Resources.test; 
List<string> words = resource_data.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries).ToList(); 

Wo

enter image description here

7

Sie müssen using System.Reflection; in der Kopfzeile aufzunehmen, um Zugang zu Versammlung zu erhalten. Dies ist nur für, wenn Sie eine Datei als "eingebettete Ressource" in VS markieren.

var filename = "MyFile.txt" 
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNameSpace." + filename)); 

Solange Sie 'using System.Reflection;' Sie können diese Versammlung wie Zugang:

Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace." + filename); 

Oder wenn Sie verwenden müssen nicht ändern Dateinamen nur:

using(var reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.m‌​yText.txt")) 
{ 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
     // Do some stuff here with your textfile 
    } 
} 
+1

'StreamReader Reader = neue StreamReader (Assembly.GetExecutingAssembly(). GetManifestResourceStream (" myProg .myText.txt ")) { ' Die einzigen Optionen Hier sind BaseStream & CurrentEncoding' }; ' – Dobz

+0

Welche Version von .net verwenden Sie? Und Sie sagen, Leser hat nur' Reader.BaseStream' und 'Reader .CurrentEncoding'? –

+0

Version 4? Yup, das ist alles was aufkommt? – Dobz

1

Nur:

Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace.MyFile.txt"); 

Der vollständige Code sollte wie folgt aussehen Um darauf zu folgen, ist AppDeveloper Lösung der Weg zu gehen.

string resource_data = Properties.Resources.test; 
string [] words = resource_data.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries); 
foreach(string lines in words){ 
..... 
} 
0
 [TestCategory("THISISATEST")] 
     public void TestResourcesReacheability() 
     { 
      byte[] x = NAMESPACE.Properties.Resources.ExcelTestFile; 
      string fileTempLocation = Path.GetTempPath() + "temp.xls"; 
      System.IO.File.WriteAllBytes(fileTempLocation, x); 

      File.Copy(fileTempLocation, "D:\\new.xls"); 
     } 

Sie erhalten die resouce Datei als Byte-Array, so dass Sie das WriteAllBytes eine neue Datei erstellen können. Wenn Sie nicht wissen, wo Sie die Datei schreiben können (Ursache der Berechtigungen und des Zugriffs), können Sie mit dem Path.GetTempPath() den temporären PC-Ordner zum Schreiben der neuen Datei verwenden und dann von dort kopieren oder arbeiten.