我正在尝试从 Visual Studio 中的资源访问并读取文本文件“achInfo.txt”。该网站上已经列出了一些解决方法,但似乎没有一个对我有用。他们只是给了我两个错误之一,我稍后会解释。
这是到目前为止的整个方法。
private string[] GetAchMetadata(short element)
{
string[] temp = { "", "" };
string cLine;
try
{
StreamReader sr = new StreamReader(Properties.Resources.achInfo);
while (!sr.EndOfStream)
{
cLine = sr.ReadLine();
if (Microsoft.VisualBasic.Information.IsNumeric(cLine))
{
if (int.Parse(cLine) == element)
{
temp[0] = cLine;
temp[1] = sr.ReadLine();
return temp;
}
}
}
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("There was a problem in collecting data.");
System.Diagnostics.Debug.Write(e);
}
return temp;
}
我的第一个假设是使用Properties.Resources.achInfo
,因为这直接引用有问题的文件。然而,这引发了System.ArgumentException
错误,描述为“路径中存在非法字符”。
然后我使用了程序集解决方案(“Grandma_Lair”是我的命名空间,不要问。”):
Assembly asm;
asm = Assembly.GetExecutingAssembly();
StreamReader sr = new StreamReader(asm.GetManifestResourceStream("Grandma_Lair.achInfo.txt"));
但是,这引发了System.ArgumentNullException
并显示消息“值不能为空”。
我还将资源的访问修饰符设置为公共,并且确保该文件设置为嵌入式资源。
有人对我的问题有任何想法吗?
更换后,您的第一个解决方案应该可以工作StreamReader
with StringReader
:
StringReader sr = new StringReader(Properties.Resources.achInfo);
价值Properties.Resources.achInfo
表示您以字符串形式完整嵌入的资源,而不是该资源的路径(因此出现“路径中的无效字符”错误)。
The GetManifestResourceStream
方法也应该有效,但是您需要为该方法提供正确的路径,该路径除其他外还基于项目的默认命名空间的名称。如果您添加一个呼叫assembly.GetManifestResourceNames()
在尝试获取资源并在调试器中查找资源名称的确切拼写之前,您还应该能够修复空指针异常问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)