2013-03-30 13 views
17

Potrzebuję przeczytać plik z moich zasobów i dodać go do listy. mój kod:Przeczytaj plik tekstowy z zasobów C#

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 szukał tego i tylko mają zdobyć odpowiedzi jak "Assembly.GetExecutingAssembly...." ale mój program nie robi mieć możliwość zgromadzenia.?

+1

Czy dodałeś 'using System.Reflection;' Czy u góry strony? – keyboardP

+1

Jaki masz problem? – Patrick

+0

Przeczytałem, że to zadziała: "Nowy StreamReader (Assembly.GetExecutingAssembly.GetNamedResourceStream (" [przestrzeń nazw programu] .Thresh Dress.txt ")' – Dobz

Odpowiedz

29

spróbować czegoś takiego:

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

Gdzie

enter image description here

7

Trzeba to using System.Reflection; w nagłówku w celu uzyskania dostępu do Zgromadzenia. Jest to możliwe tylko wtedy, gdy oznaczysz plik jako "Osadzony zasób" w VS.

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

Dopóki dołączasz "using System.Reflection;" można uzyskać dostęp do zespołu tak:

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

Lub jeśli nie trzeba zmieniać nazwę pliku, wystarczy użyć:

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

pełny kod powinien wyglądać następująco:

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

'Czytnik StreamReadera = nowy StreamReader (Assembly.GetExecutingAssembly(). GetManifestResourceStream (" myProg .myText.txt ")) { ' Jedynymi opcjami tutaj są BaseStream & CurrentEncoding' }; ' – Dobz

+0

Jaka wersja .netu używasz? A mówisz, że czytelnik ma tylko' reader.BaseStream' i 'reader .CurrentEncoding'? –

+0

Wersja 4? Tak, to jest wszystko, co się pojawia? – Dobz

1

Wystarczy aby to osiągnąć, rozwiązaniem AppDeveloper jest droga.

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

Otrzymasz plik Resouce postaci tablicy bajtów, więc można użyć WriteAllBytes aby utworzyć nowy plik. Jeśli nie wiesz, gdzie możesz zapisać plik (przyczyna uprawnień i dostęp), możesz użyć Path.GetTempPath(), aby użyć folderu tymczasowego PC do napisania nowego pliku, a następnie możesz go skopiować lub pracować.

Powiązane problemy