2013-03-30 179 views
17

我需要从我的资源中读取文件并将其添加到列表中。 我的代码:从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 
    } 
} 

伊夫搜索这只有已经得到了答案,像"Assembly.GetExecutingAssembly...."但我的计划可是没有大会的选项?

+1

您是否在页面顶部添加了'使用System.Reflection;'? – keyboardP

+1

你有什么问题? – Patrick

+0

我读了这将工作'新StreamReader(Assembly.GetExecutingAssembly.GetNamedResourceStream(“[程序命名空间] .Thresh Dress.txt”)' – Dobz

回答

29

尝试这样:

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

enter image description here

7

你需要在你的头using System.Reflection;为了得到大会的访问。这仅适用于在VS中将文件标记为“Embedded Resource”的情况。

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

只要包含'using System.Reflection';'你可以像这样访问大会:

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

或者,如果你不需要改变文件名就用:

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

完整的代码应该是这样的:

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 = new StreamReader(Assembly.GetExecutingAssembly()。GetManifestResourceStream(“myProg .myText.txt“) 'The Only Options Here BaseStream&CurrentEncoding' };' – Dobz

+0

你使用的是什么版本的.net而你只是说读者只有'reader.BaseStream'和'reader .CurrentEncoding'? –

+0

版本4?是的,这是所有出现? – Dobz

1

刚为了跟上这一点,AppDeveloper解决方案就是要走的路。

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

你得到的种源文件的字节数组,所以你可以使用WriteAllBytes创建一个新的文件。如果你不知道在哪里写文件(导致权限和访问),你可以使用Path.GetTempPath()来使用PC临时文件夹来写新文件,然后你可以从那里复制或工作。