从C#Resources读取文本文件

时间:2013-03-30 19:17:18

标签: c# file-io resources streamreader

我需要从我的资源中读取一个文件并将其添加到列表中。 我的代码:

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...."这样的答案,但我的程序没有选择汇编。?

4 个答案:

答案 0 :(得分:32)

尝试这样的事情:

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

哪里

enter image description here

答案 1 :(得分:8)

您需要在标头中加入using System.Reflection;才能访问Assembly。这仅适用于在VS中将文件标记为“嵌入式资源”的情况。

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

只要包含'using System.Reflection;'即可。您可以像这样访问Assembly:

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
    }
}

答案 2 :(得分:1)

为了实现这一目标,AppDeveloper解决方案即将推出。

string resource_data = Properties.Resources.test;
string [] words = resource_data.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);
foreach(string lines in words){
.....
}

答案 3 :(得分: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临时文件夹来编写新文件,然后您可以从那里复制或工作