5

Visual Studio のリソースからテキスト ファイル 'achInfo.txt' にアクセスして読み取ろうとしています。このサイトにはすでにいくつかの回避策がリストされていますが、どれもうまくいかないようです。後で説明する 2 つのエラーのうちの 1 つが表示されるだけです。

これがこれまでの方法のすべてです。

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ただし、これにより、「値を null にすることはできません」というメッセージがスローされます。また、リソースのアクセス修飾子をパブリックに設定し、ファイルが埋め込みリソースに設定されていることを確認しました。

誰かが私の問題について何か考えを持っていますか?

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 に答える