У меня есть странная проблема. Я хочу написать видимый textBox.Text в файл «ini» в FormClosing (прямо перед тем, как форма закрывается), поэтому я дважды щелкнул это событие в панели свойств основной формы и заполнил соответствующую функцию следующим образом:File.ReadAllText предотвращает закрытие формы при нажатии кнопки x
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. Если я просто остановлю отладку, содержимое файлов также не изменится.
EDIT:
Реальная проблема была функция, которую я использовал, чтобы найти и вернуть имя пользователя из ини файла:
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";
}
Содержание ини файла:
Имя пользователя = SomeName
Название бота = SomeName
Я скопировал вышеуказанную функцию из stackoverflow. Я был уверен, что это сработало, потому что оно захватило «SomeName» так, как я хотел. Теперь я использую другую функцию (также из stackoverflow), которая ищет файл ini для «User Name =» и возвращает текст, который появляется сразу после него.
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
только одну строку? Спасибо заранее!
Вы уверены, что это не исключение? Например, похоже, что вы пытаетесь сохранить папку, а не файл? –
Я не вижу расширения в вашем файле name.Btw, посмотрите на try/catch.Тогда, возможно, вы можете получить значащие сообщения об ошибках вместо замороженного окна. –
Нет, нет ошибки вообще, и она не замерзает, она просто не реагирует на нажатие кнопки x и, таким образом, ничего не сохраняет в файле. – betaFlux