чтение строки из ресурсов текстового файла - PullRequest
0 голосов
/ 18 июля 2011

Я добавил в приложение 3 ресурса текстовых файлов и пытаюсь прочитать их, но я просто не могу его взломать. Я пытался использовать файловый поток и только что попробовал использовать ResourceReader, и я попробовал комбинацию из 2, но не повезло, есть идеи о том, как я мог бы начать с этим?

Да, цель файлов ресурсов - загрузить значения в поля со списком в form_load. Я решил сделать это так, чтобы ЕС мог добавлять и удалять значения по своему усмотрению.

Если вы думаете, что есть лучшие (но все еще ненавязчивые) способы сделать это, пожалуйста, поделитесь.

Вот что я попробовал и потерпел неудачу:

Подход Filestream, где TextFile1 (до 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 ]

1 голос
/ 18 июля 2011

Вы можете просто поместить информацию, которую хотите сохранить, в файл 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;
    }

EDIT: Как я уже сказал вверху, щелкните правой кнопкой мыши проект в обозревателе решений и перейдите на вкладку настроек. Когда вы окажетесь там:

  1. Создайте настройку с любым именем по вашему желанию, "comboBox1" для Пример.
  2. Измените его тип на System.Collections.Specialized.StringCollection
  3. Измените Scope на то, что вам нравится. (Вы можете использовать это для установки, если настройка применяется к данному пользователю или всему приложению)
  4. Щелкните в редакторе значений и нажмите кнопку [...] elipsis справа от строки.
  5. Добавьте нужный параметр в каждой строке.
  6. Повторите при необходимости.

Visual Studio позаботится о том, как отформатировать все это в файле конфигурации и настроить все, что нужно для работы.

0 голосов
/ 18 июля 2011

Точно, вместо этого используйте TInifile.При первом выполнении, когда разделы не существуют, запишите значения по умолчанию.В следующий раз просто прочитайте файл.

Файл ЕС должен легко редактироваться для ЕС

...