逐行读取资源txt

时间:2015-01-06 14:02:32

标签: c# resources .net-assembly

我的桌面上有一个txt文件,代码为:

string source = @"C:\Users\Myname\Desktop\file.txt"
string searchfor = *criteria person enters*
foreach (string content in File.ReadLines(source))
{
if (content.StartsWith(searchfor)
{
*do stuff*
}
}

我最近刚刚学会了我可以将txt添加为资源文件(因为它永远不会被更改)。但是,我不能让程序像上面那样逐行读取file.txt作为资源。我试过了     Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsFormsApplication.file.txt")

使用流阅读器,但它显示无效类型。

基本概念:用户输入数据,变成一个字符串,与file.txt的起始行相比,因为它会读取列表。

任何帮助?

修改 乔恩,我试着看看它是否正在阅读文件:

        var assm = Assembly.GetExecutingAssembly();
        using (var stream = assm.GetManifestResourceStream("WindowsFormsApplication.file.txt")) ;
        {
            using (var reader = new StreamReader(stream))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    label1.Text = line;
                }
            }
        }

它表示“当前上下文中不存在名称流”和“stream = assm.Get”行的“可能错误的空语句”

2 个答案:

答案 0 :(得分:2)

您可以使用TextReader一次读取一行 - StreamReader是从流中读取的TextReader。所以:

var assm = Assembly.GetExecutingAssembly();
using (var stream = assm.GetManifestResourceStream("WindowsFormsApplication.file.txt"))
{
    using (var reader = new StreamReader(stream))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            ...
        }
    }
}

您可以在TextReader上编写一个扩展方法来读取所有行,但如果您只需要这一行,则上述内容会更简单。

答案 1 :(得分:0)

发现问题:

该文件虽然作为资源加载,尽管所有教程都说它是NameSpace.File,但事实是系统将该位置设置为NameSpace.Resources.File,所以我也必须更新它。

然后我使用了以下代码:

        string searchfor = textBox1.Text
        Assembly assm = Assembly.GetExecutingAssembly();
        using (Stream datastream = assm.GetManifestResourceStream("WindowsFormsApplication2.Resources.file1.txt"))
        using (StreamReader reader = new StreamReader(datastream))
        {
            string lines;
            while ((lines = reader.ReadLine()) != null)
            {
                if (lines.StartsWith(searchfor))
                {
                    label1.Text = "Found";
                    break;
                }
                else
                {
                    label1.Text = "Not found";
                }
            }
        }