我已经看过很多关于此事的其他帖子,但没有任何意义。这是我从另一篇文章中看到的结构。
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());
}
}
}
非常感谢帮助。
答案 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。