На другом форуме (http://www.sql.ru/forum/1282259/primer-iz-kursa-ado-net-ne-rabotaet) разместил вопрос, проект C# и ссылку на видео с ошибкой. Помогите, пожалуйста, разобраться, почему возникает ошибка и не записывается информация в конфигурационный файл. Проект прикрепил.
Конечно может вопрос и глупый, но не проще ли писать и хранить конфигурацию в Properties.Settings или в том же ini? --- Добавлено, 12 янв 2018 --- Случай с ini: Сам класс PHP: using System.IO;using System.Reflection;using System.Runtime.InteropServices;using System.Text;namespace IniFiles{ class IniFile { string Path; //Имя файла. [DllImport("kernel32")] // Подключаем kernel32.dll и описываем его функцию WritePrivateProfilesString static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath); [DllImport("kernel32")] // Еще раз подключаем kernel32.dll, а теперь описываем функцию GetPrivateProfileString static extern int GetPrivateProfileString(string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath); // С помощью конструктора записываем пусть до файла и его имя. public IniFile(string IniPath) { Path = new FileInfo(IniPath).FullName.ToString(); } //Читаем ini-файл и возвращаем значение указного ключа из заданной секции. public string ReadINI(string Section, string Key) { var RetVal = new StringBuilder(255); GetPrivateProfileString(Section, Key, "", RetVal, 255, Path); return RetVal.ToString(); } //Записываем в ini-файл. Запись происходит в выбранную секцию в выбранный ключ. public void Write(string Section, string Key, string Value) { WritePrivateProfileString(Section, Key, Value, Path); } //Удаляем ключ из выбранной секции. public void DeleteKey(string Key, string Section = null) { Write(Section, Key, null); } //Удаляем выбранную секцию public void DeleteSection(string Section = null) { Write(Section, null, null); } //Проверяем, есть ли такой ключ, в этой секции public bool KeyExists(string Key, string Section = null) { return ReadINI(Section, Key).Length > 0; } }} Вызов PHP: .....using System.Text;using System.Windows.Forms;....namespace IniFiles{ public partial class Form1 : Form { IniFile INI = new IniFile("config.ini"); public Form1() { InitializeComponent(); ... }.... private void method(){ INI.ReadINI("SettingForm", "Height") //Чтение INI.WriteINI("SettingForm", "Height", "Тут параметр"); }.... }}
С Properties.Settings не работал. В чем отличие от использования App.config? Я хотел бы сделать переносимое приложение, когда исполняемый файл и файл настроек находятся в одной директории, которую можно просто копировать и больше ничего не настраивать, только запустить исполняемый файл. Использование Properties.Settings это позволяет? В каком файле сохраняются настройки?
Ну по мне вариант что с INI что с Properties.Settings одно и тоже. единственное для работы с INI нужно класс писать (выше написал, да и вот как то писал статейку). В случае с Properties.Settings идешь в свойства проекта и переходишь во вкладку [Параметры] и там задаешь параметры по умолчанию. После в коде начинаешь с ними работать. Пример: PHP: ReadText = Properties.Settings.Default.Text; // Чтение из конфигурации парамера TextProperties.Settings.Default.Text = WriteText; // Запись в параметр TextProperties.Settings.Default.Save(); // Сохраняем запись в Text --- Добавлено, 13 янв 2018 --- Мелкое дополнение к Properties.Settings. В разделе [Параметры] есть таблица для создания самих параметров: Где: Имя - Имя параметра, Тип - Тип переменной (параметра), Область - Где будет храниться данный параметр (файл с этим параметром. т.е. где твоему приложение искать его), Значение - Значение самого параметра, т.е. сам параметр
Спасибо за ответ! Попробовал. Как я понял, все параметры и их значения сохраняются в файле App.config, а после компиляции сохраняются в файле <имя проекта>.exe.config. Хотел бы уточнить следующее: 1. В области есть 2 возможности: пользователь и приложение. Когда следует выбирать пользователя, а когда приложение? Мне хотелось бы иметь возможность как читать, так и изменять значения параметров (добавлять параметры и их значения). 2. При переносе файлов <имя проекта>.exe и <имя проекта>.exe.config я буду иметь автономное приложение, которое могу переносить простым копированием с компьютера на компьютер?
Правильно ли я понял, что в области надо выбирать приложение и тогда можно будет просто переносить файлы <имя проекта>.exe и <имя проекта>.exe.config?