5

我正在尝试从 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消息“值不能为空”。我还将资源上的访问修饰符设置为公共,并确保文件设置为嵌入式资源。

有人对我的问题有任何想法吗?

4

1 回答 1

3

StreamReader替换为后,您的第一个解决方案应该可以工作StringReader

StringReader sr = new StringReader(Properties.Resources.achInfo);

该值Properties.Resources.achInfo表示您作为字符串提供给您的全部嵌入的资源,而不是该资源的路径(因此出现“路径中的无效字符”错误)。

GetManifestResourceStream方法也应该有效,但是您需要为该方法提供正确的路径,除其他外,该路径基于项目的默认命名空间的名称。如果您在尝试获取资源之前添加调用assembly.GetManifestResourceNames(),并在调试器中查找资源名称的准确拼写,您也应该能够修复空指针异常问题。

于 2013-09-15T10:41:36.200 回答