如何使用StreamReader读取嵌入式资源(文本文件)并将其作为字符串返回?我当前的脚本使用Windows窗体和文本框,允许用户查找和替换未嵌入的文本文件中的文本。

private void button1_Click(object sender, EventArgs e)
{
    StringCollection strValuesToSearch = new StringCollection();
    strValuesToSearch.Add("Apple");
    string stringToReplace;
    stringToReplace = textBox1.Text;

    StreamReader FileReader = new StreamReader(@"C:\MyFile.txt");
    string FileContents;
    FileContents = FileReader.ReadToEnd();
    FileReader.Close();
    foreach (string s in strValuesToSearch)
    {
        if (FileContents.Contains(s))
            FileContents = FileContents.Replace(s, stringToReplace);
    }
    StreamWriter FileWriter = new StreamWriter(@"MyFile.txt");
    FileWriter.Write(FileContents);
    FileWriter.Close();
}

当前回答

对于所有快速想要winforms中硬编码文件文本的人;

右键单击解决方案资源管理器>资源>添加文件中的应用程序。单击它,然后在财产选项卡中将“FileType”设置为“Text”。在您的程序中,只需执行资源<资源名称>.toString();读取文件。

我不建议将此作为最佳实践或任何东西,但它工作迅速,可以做它需要做的事情。

其他回答

基本上,您使用System.Reflection获取对当前程序集的引用。然后,使用GetManifestResourceStream()。

例如,从我发布的页面:

注:需要添加使用System.Reflection;让它发挥作用

   Assembly _assembly;
   StreamReader _textStreamReader;

   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }

您也可以使用@dtb答案的简化版本:

public string GetEmbeddedResource(string ns, string res)
{
    using (var reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format("{0}.{1}", ns, res))))
    {
        return reader.ReadToEnd();
    }
}

我知道这是一条古老的线索,但这对我来说是有效的:

将文本文件添加到项目资源将访问修饰符设置为public,如Andrew Hill所示阅读文本如下:textBox1=新文本框();textBox1.Text=属性.Resources.SomeText;

我添加到资源中的文本:“SomeText.txt”

对于所有快速想要winforms中硬编码文件文本的人;

右键单击解决方案资源管理器>资源>添加文件中的应用程序。单击它,然后在财产选项卡中将“FileType”设置为“Text”。在您的程序中,只需执行资源<资源名称>.toString();读取文件。

我不建议将此作为最佳实践或任何东西,但它工作迅速,可以做它需要做的事情。

答案很简单,如果直接从resources.resx添加文件,只需这样做。

string textInResourceFile = fileNameSpace.Properties.Resources.fileName;

使用这行代码,文件中的文本将直接从文件中读取并放入字符串变量中。