У меня странная проблема. Я хочу записать видимый textBox.Text в ini-файл при закрытии формы (прямо перед закрытием формы), поэтому я дважды щелкнул это событие на панели свойств основной формы и заполнил соответствующую функцию следующим образом:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// store the whole content in a string
string settingsContent = File.ReadAllText(settingsPath + "CBSettings");
// replace a name with another name, which truly exists in the ini file
settingsContent.Replace(userName, userNameBox.Text);
// write and save the altered content back to the ini file
// settingsPath looks like this @"C:\pathToSettings\settingsFolder\"
File.WriteAllText(settingsPath + "CBSettings", settingsContent);
}
Форма запускается без проблем, но не закрывается нажатием кнопки x. Он корректно закрывается только тогда, когда я комментирую строку File.WriteAllText. Если я просто остановлю отладку, содержимое файлов также не изменится.
ИЗМЕНИТЬ:
Настоящей проблемой была функция, которую я использовал для поиска и возврата имени пользователя из файла ini:
public static string GetTextAfterTextFromTextfile(string path, string file, string fileExtension, string textToLookFor)
{
string stringHolder;
StreamReader sr = File.OpenText(path + file + fileExtension);
while((stringHolder = sr.ReadLine()) != null)
{
if(stringHolder.Contains(textToLookFor))
{
return stringHolder.Replace(textToLookFor, "");
}
}
sr.Close();
return "Nothing found";
}
Содержимое ini-файла:
Имя пользователя = SomeName
Имя бота = SomeName
Я скопировал вышеуказанную функцию из stackoverflow. Я был уверен, что это сработало, потому что оно захватило SomeName именно так, как я хотел. Теперь я использую другую функцию (тоже из stackoverflow), которая ищет в ini-файле «Имя пользователя =» и возвращает текст, который идет сразу после него.
public static string GetTextAfterTextFromTextfile(string path, string textToSkip)
{
string str = File.ReadAllText(path);
string result = str.Substring(str.IndexOf(textToSkip) + textToSkip.Length);
return result;
}
Проблема в том, что он возвращается
Имя SomeNameBot = Имя SomeName
Любой намек на то, как ограничить string result
только одной строкой? Спасибо заранее!
TextProcessor.settingsPath
, но записываете его вsettingsPath
- не знаю, одно и то же значение. Кроме того, эта строкаsettingsContent.Replace(userName, userNameBox.Text);
на самом деле не изменитsettingsContent
, поэтому результирующий файл всегда будет неизменным. - person Lanorkin   schedule 13.09.2014public static string settingsPath = @"C:\MyWinform\CBSettings.ini";
- person betaFlux   schedule 13.09.2014