从Visual Studio 2013中的Properties.Resources获取流

时间:2017-06-03 00:04:25

标签: c# csv stream resources streamreader

我已经看到很多关于此的帖子,无法使用。我在我的项目的Resources文件夹中添加了一个文件(右键单击project-> Properties-> Resources,然后选择File,Add File)。

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

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

我尝试过以下但是无论是否将Build Action设置为Resources或Embedded Resource,都会为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,我会得到我文件的字符串表示。

更新,通过右键单击项目添加文件 - >属性 - >资源(这种方式,它将无法工作),通过正确点击项目添加 - > ADD->现有项目,然后设置构建操作=嵌入式资源,它将工作。 (感谢Aedvald Tseh的详细解答,帮助我了解这一点)

1 个答案:

答案 0 :(得分:1)

将csv文件作为嵌入资源添加到工作室项目中。 csv file as embedded resource

使用visual studio项目的默认命名空间作为文件名称的前缀。因此,“mytestfile.csv”变为“ConsoleApp1.mytestfile.csv”。 然后你可以这样阅读内容:

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