如何使用Visual C#访问Visual Studios中的嵌入式资源?

时间:2015-07-21 05:58:38

标签: c# embedded-resource

我已经看过很多关于此事的其他帖子,但没有任何意义。这是我从另一篇文章中看到的结构。

var assembly = Assembly.GetExecutingAssembly();
var resourceName = "MyCompany.MyProduct.MyFile.txt";

using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
    string result = reader.ReadToEnd();
}

我不明白"MyCompany.MyProduct.MyFile.txt"部分的内容。它是“WindowsFormApplication2.Properties.Resources.LabelData.txt”吗?因为那不起作用。我一直得到一个NullReferenceException ...我假设它没有正确的文件。这是我现有的代码。

public void readAllLabelValues()
        {

            var assembly = Assembly.GetExecutingAssembly();
            var resourceName = "WindowsFormsApplication2.WindowsFormsApplication2.LabelData.txt";

            using (Stream stream = assembly.GetManifestResourceStream(resourceName))

            using (StreamReader Reader = new StreamReader(stream))
            {
                foreach (Label label in tableLayoutPanel1.Controls.OfType<Label>())
                {
                    label.Text = (Reader.ReadLine());
                }
            }
        }

非常感谢帮助。

3 个答案:

答案 0 :(得分:0)

你可以在微软网站(https://support.microsoft.com/en-us/kb/319292)中看到命名约定是:

  

编译器将项目的根命名空间添加到名称中   它包含在项目中的资源。例如,如果   项目的根命名空间是MyNamespace,资源是命名的   MyNamespace.MyTextFile.txt和MyNamespace.MyImage.bmp。

您可以使用调试器通过使用以下代码找出资源名称:

thisExe = System.Reflection.Assembly.GetExecutingAssembly();
string [] resources = thisExe.GetManifestResourceNames();

如果您未在资源中看到它,请确保您已将构建操作的文本文件属性更改为嵌入式资源,而不是默认内容值。

答案 1 :(得分:0)

WindowsFormApplication2.LabelData.txt

答案 2 :(得分:0)

我发现你可以使用Application.StartUpPath。这是我用来制作有效路径的代码:

string fileLocation = Path.Combine(Application.StartupPath, "programData.txt");

            if (!File.Exists(fileLocation))
            {
                File.Create(fileLocation);
            }

然后读取和写入它,只需创建指向fileLocation的StreamReader或StreamWriter。