从文本文件资源中读取字符串

时间:2011-07-18 06:48:40

标签: c# resources filestreams

我已经为应用添加了3个文本文件资源,并尝试从中读取它们但我似乎无法破解它。我已经尝试过使用一个文件流,并且刚刚尝试过使用ResourceReader,我尝试了2的组合,但没有运气,有关如何开始使用它的任何想法?

哦,是的,资源文件的目的是将值加载到form_load上的组合框中。我决定这样做,所以欧盟可以添加和删除他/她认为合适的vals。

如果您认为有更好(但仍然不显眼)的方式,请分享。

这是我尝试过的失败者:

Filestream方法,其中TextFile1(to 3).txt是资源文本文件,它在新的FileStream()语句中静静地死掉,没有抛出异常

    private void Scan_Form_Load(object sender, EventArgs e)
    {
        // read combo box values from textfile
        AddVals("TextFile1.txt",cmbBox1);
        AddVals("TextFile2.txt", cmbBox2);
        AddVals("TextFile3.txt", cmbBox3);


    }

    private void AddVals(string fileName,ComboBox thisBox)
    {
        using (FileStream repFs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
        {
            StreamReader strReader = new StreamReader(repFs);
            ArrayList aVals = new ArrayList();
            while (strReader.Peek() != -1)
            {
                aVals.Add(strReader.ReadLine());
            }

            foreach (object val in aVals)
            {
                thisBox.Items.Add(val.ToString());
            }
        }
    }

然后是ResourceReader + FileStream方法,同样的问题,主要区别在于我只是在非fs方法中调用文件名字符串而不是打开流:

               private void AddVals(string fileName, ComboBox thisBox)
        { 
        using (FileStream fs = new FileStream(fileName, FileMode.Open))
        {
            IResourceReader reader = new ResourceReader(fs);
            IDictionaryEnumerator en = reader.GetEnumerator();
            while (en.MoveNext())
            {
                string val = en.Value.ToString();
                thisBox.Items.Add(val);
            }
            fs.Close();
            reader.Close();
        }
    }

2 个答案:

答案 0 :(得分:1)

您可以将要存储的信息放在app.config文件中,就像这样。 如果您只是右键单击解决方案资源管理器中的项目并转到设置选项卡,则可以轻松进行设置。

用户可以在技术上直接编辑app.config文件,但您也可以为用户提供一个表单进行编辑。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CSharpWindowsFormsApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <CSharpWindowsFormsApplication1.Properties.Settings>
            <setting name="comboBox1" serializeAs="Xml">
                <value>
                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <string>choice1</string>
                        <string>choice2</string>
                        <string>choice3</string>
                        <string>choice4</string>
                        <string>choice5</string>
                    </ArrayOfString>
                </value>
            </setting>
            <setting name="comboBox2" serializeAs="Xml">
                <value>
                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <string>choice1</string>
                        <string>choice2</string>
                        <string>choice3</string>
                        <string>choice4</string>
                        <string>choice5</string>
                    </ArrayOfString>
                </value>
            </setting>
            <setting name="comboBox3" serializeAs="Xml">
                <value>
                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <string>choice1</string>
                        <string>choice2</string>
                        <string>choice3</string>
                        <string>choice4</string>
                        <string>choice5</string>
                    </ArrayOfString>
                </value>
            </setting>
        </CSharpWindowsFormsApplication1.Properties.Settings>
    </applicationSettings>
</configuration>

编辑:如果不明显,那些是System.Collections.Specialized.StringCollection类型设置。

和...

        private void Scan_Form_Load(object sender, EventArgs e)
    {
        // read combo box values from textfile
        comboBox1.DataSource = Properties.Settings.Default.comboBox1;
        comboBox2.DataSource = Properties.Settings.Default.comboBox2;
        comboBox3.DataSource = Properties.Settings.Default.comboBox3;
    }

修改 就像我在顶部说的那样,右键单击解决方案资源管理器中的项目,然后转到设置选项卡。一旦你在那里:

  1. 使用您想要的任何名称创建设置,“comboBox1” 示例
  2. 将其类型更改为 System.Collections.Specialized.StringCollection
  3. 将范围更改为您喜欢的任何内容。 (您可以使用它来设置该设置是否适用于给定用户或整个应用程序)
  4. 点击数值编辑器,然后点击该行右侧的省略号[...]按钮。
  5. 在每一行上添加所需的选项。
  6. 根据需要重复。
  7. Visual Studio将负责如何在配置文件中对其进行格式化,并设置所需的一切。

答案 1 :(得分:0)

确切地说,使用TInifile。 在部分不存在时首次执行时,写入默认值。 下次(s)只是阅读了inifile。

对于欧盟来说,应该很容易编辑inifile