【问题标题】:Get Stream from Properties.Resources in Visual Studio 2013从 Visual Studio 2013 中的 Properties.Resources 获取流
【发布时间】:2017-06-03 00:04:24
【问题描述】:

我在外面看到了很多关于这个的帖子,但都找不到工作。我在项目的 Resources 文件夹中添加了一个文件(右键单击 project->Properties->Resources,然后选择 File,Add File)。

我尝试将 Build Action 设置为 Resources 和 Embedded Resources。

我需要使用 StreamReader 读取该文件。

我尝试了以下操作,但无论我将构建操作设置为资源还是嵌入式资源,都为 myStream 返回 NULL:

    // IF I ADD FILE AS SUGGESTED BELOW IN UPDATE, THIS WILL WORK; OTHERWISE, I GET NULL   
    Stream myStream = Assembly
      .GetExecutingAssembly()
      .GetManifestResourceStream("MyProject.General.Tests.mytestfile.csv"); //returns NULL
    using (CsvReader csv = new CsvReader(new StreamReader(myStream), true)
    {
       ... 
    }

我也试过这个,但它也返回 NULL

Stream myStream = Assembly
  .GetExecutingAssembly()
  .GetManifestResourceStream(Properties.Resources.mytestfile); //returns NULL
using (CsvReader csv = new CsvReader(new StreamReader(myStream), true)
{
   ...
}

如果我快速观看并键入此 Properties.Resources.mytestfile,我确实会得到我的文件的字符串表示形式。

更新,而不是通过右键单击项目->属性->资源添加文件(这样,它将不起作用),通过右键单击项目->添加->添加它现有项目,然后设置构建操作=嵌入式资源,它将起作用。 (感谢 Aedvald Tseh 的详细回答帮助我解决了这个问题)

【问题讨论】:

  • 它不是流,它是作为字符串嵌入的。所以使用 new StringReader(Properties.Resources.mytestfile)
  • 那行不通。我尝试将 mytestfile 设置为 BuildAction=Resource 和 Build Action = Embedded Resource,没有工作。应用崩溃,看不到错误

标签: c# csv stream resources streamreader


【解决方案1】:

将您的 csv 文件作为嵌入式资源添加到工作室项目中。

使用 Visual Studio 项目的默认命名空间为文件名添加前缀。因此“mytestfile.csv”变成了“ConsoleApp1.mytestfile.csv”。 然后你可以像这样阅读内容:

System.IO.Stream myStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ConsoleApp1.mytestfile.csv");

【讨论】:

  • 已经试过了。根据上述描述,返回的流为空。我尝试将 Build Action 设置为 Embedded Resource 和 Resource,任何一个都返回 null
  • 您是对的,如果您按照您的描述将 csv 文件添加到项目中,它就可以工作。如果您按照我描述的方式添加它,它将无法正常工作,这很奇怪。非常感谢 Aedvald
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多