从 C# 资源中读取文本文件
Posted
技术标签:
【中文标题】从 C# 资源中读取文本文件【英文标题】:Read text file from C# Resources 【发布时间】:2013-03-21 06:55:28 【问题描述】:我需要从我的资源中读取一个文件并将其添加到列表中。 我的代码:
private void Form1_Load(object sender, EventArgs e)
using (StreamReader r = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.myText.txt")))
//The Only Options Here Are BaseStream & CurrentEncoding
我已经搜索过这个并且只得到了像"Assembly.GetExecutingAssembly...."
这样的答案,但是我的程序没有Assembly的选项。?
【问题讨论】:
您是否在页面顶部添加了using System.Reflection;
?
你有什么问题?
我读到这会工作New StreamReader(Assembly.GetExecutingAssembly.GetNamedResourceStream("[program namespace].Thresh Dress.txt")
但它没有.GetNamedResourceStream
的选项
确保在输入名称空间时使用下划线而不是空格。如果您仍然需要澄清,请向上滚动到代码顶部,并在其中说明命名空间使用该名称。
【参考方案1】:
试试这样的:
string resource_data = Properties.Resources.test;
List<string> words = resource_data.Split(new[] Environment.NewLine, StringSplitOptions.RemoveEmptyEntries).ToList();
在哪里
【讨论】:
【参考方案2】:您需要在标题中包含using System.Reflection;
才能访问Assembly。这仅适用于您在 VS 中将文件标记为“嵌入式资源”时。
var filename = "MyFile.txt"
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNameSpace." + filename));
只要您包含“使用 System.Reflection;”您可以像这样访问大会:
Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace." + filename);
或者,如果您不需要更改文件名,只需使用:
Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace.MyFile.txt");
完整的代码应该是这样的:
using(var reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.myText.txt"))
string line;
while ((line = reader.ReadLine()) != null)
// Do some stuff here with your textfile
【讨论】:
StreamReader reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.myText.txt"))
这里唯一的选项是 BaseStream 和 CurrentEncoding` ;`
您使用的是什么版本的 .net?你是说读者只有reader.BaseStream
和reader.CurrentEncoding
?
版本 4?是的,这就是全部?
我无法回答您为什么缺少所有方法。您似乎只有可用的属性。即使 IDE 对您调用这些方法不满意,您是否尝试过编译它?您也可以尝试清理您的项目并重新启动 VS。【参考方案3】:
就在这一点上,AppDeveloper 解决方案是要走的路。
string resource_data = Properties.Resources.test;
string [] words = resource_data.Split(new[] Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
foreach(string lines in words)
.....
【讨论】:
【参考方案4】: [TestCategory("THISISATEST")]
public void TestResourcesReacheability()
byte[] x = NAMESPACE.Properties.Resources.ExcelTestFile;
string fileTempLocation = Path.GetTempPath() + "temp.xls";
System.IO.File.WriteAllBytes(fileTempLocation, x);
File.Copy(fileTempLocation, "D:\\new.xls");
您将资源文件作为字节数组获取,因此您可以使用 WriteAllBytes 创建一个新文件。如果您不知道可以在哪里写入文件(由于权限和访问权限),您可以使用 Path.GetTempPath() 使用 PC 临时文件夹写入新文件,然后您可以从那里复制或工作。
【讨论】:
以上是关于从 C# 资源中读取文本文件的主要内容,如果未能解决你的问题,请参考以下文章