c# - C#从资源中读取文本文件而不是本地错误,添加命名空间不起作用
问题描述
我在这里尝试了多种解决方案,但没有一个我可以开始工作。我要做的就是从我的资源文件夹而不是实际的本地文件夹中读取一个文本文件。
文件名:TextFile.txt
设置为嵌入式资源。
有效的“本地文件”代码:
string[] spaces = File.ReadAllLines("C:\\Users\\a\\source\\repos\\a\\bin\\Debug\\TextFile.txt");
当前代码:
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "TextFile.txt";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
string result = reader.ReadToEnd();
}
string[] spaces = File.ReadAllLines(resourceName);
但我收到以下错误:
System.ArgumentNullException: '值不能为空。参数名称:流'
在这条线上:
using (StreamReader reader = new StreamReader(stream))
EDIT1根据链接尝试了这个(为什么在调用GetManifestResourceNames时资源名称存在时GetManifestResourceStream返回null?)和这个NULL ERROR:
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "programname.TextFile.txt";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
string result = reader.ReadToEnd();
}
string[] spaces = File.ReadAllLines(resourceName);
同样的错误,我是否将命名空间位放在错误的位置?
编辑2,试过这个:
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "programname.Resources.TextFile.txt";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
string result = reader.ReadToEnd();
}
string[] spaces = File.ReadAllLines(resourceName);
新错误:
System.IO.FileNotFoundException: '找不到文件'C:\Users\a\source\repos\a\bin\Debug\programname.Resources.TextFile.txt'。'
位置TextFile.txt
programname
Resources
TextFile.txt
解决方案
此函数将为您的文件返回正确的资源名称:
string resourceName = assembly.GetManifestResourceNames()
.Single(str => str.EndsWith("TextFile.txt"));
第二期:
对于string[] spaces = File.ReadAllLines(resourceName);
您不能使用相同的资源名称(嵌入式资源)。如果您需要逐行阅读文本,请使用例如:
using (StreamReader reader = new StreamReader(stream))
{
while (reader.Peek() >= 0)
{
Console.WriteLine(reader.ReadLine());
}
}
推荐阅读
- c - 使用 GLUT 库的突围游戏 - 改进
- mysql - SELECT 显示一个包含列名而不是里面的数据的列表
- python - 如何使用 Sympy 在 Python 中使用 while 循环对等式进行 5 次微分,每次运行微分一次?
- arrays - 从数组 c 中选择随机线
- html - 儿童定位的宽度百分比标准是什么:绝对
- ssl - Hostgator:SSL 信息在我的服务器上 SSL/TSL 管理器和 SiteLock/其他任何地方不匹配
- python - Python语法问题 - 变量名前的冒号
- java - 有没有一种简单的方法来编写这段代码?
- python - 使用包含多个值的列从 DataFrame 创建 Edgelist
- r - 对热图的单元格进行排序