【问题标题】:Read text file from C# Resources从 C# 资源中读取文本文件
【发布时间】:2013-03-21 06:55:28
【问题描述】:

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

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

【问题讨论】:

  • 您是否在页面顶部添加了using System.Reflection;
  • 你有什么问题?
  • 我读到这会工作New StreamReader(Assembly.GetExecutingAssembly.GetNamedResourceStream("[program namespace].Thresh Dress.txt")
  • 但它没有.GetNamedResourceStream的选项
  • 确保在输入名称空间时使用下划线而不是空格。如果您仍然需要澄清,请向上滚动到代码顶部,并在其中说明命名空间使用该名称。

标签: c# file-io resources streamreader


【解决方案1】:

试试这样的:

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

在哪里

【讨论】:

    【解决方案2】:

    您需要在标题中包含using System.Reflection; 才能访问Assembly。这仅适用于您在 VS 中将文件标记为“嵌入式资源”时。

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

    只要您包含“使用 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
        }
    }
    

    【讨论】:

    • StreamReader reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.myText.txt")) { 这里唯一的选项是 BaseStream 和 CurrentEncoding` };`
    • 您使用的是什么版本的 .net?你是说读者只有reader.BaseStreamreader.CurrentEncoding
    • 版本 4?是的,这就是全部?
    • 我无法回答您为什么缺少所有方法。您似乎只有可用的属性。即使 IDE 对您调用这些方法不满意,您是否尝试过编译它?您也可以尝试清理您的项目并重新启动 VS。
    【解决方案3】:

    就在这一点上,AppDeveloper 解决方案是要走的路。

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

    【讨论】:

      【解决方案4】:
              [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 临时文件夹写入新文件,然后您可以从那里复制或工作。

      【讨论】:

        猜你喜欢
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        相关资源
        最近更新 更多