Как реализовать сохранение файла С# WinForms
«Сохранить как» нетрудно реализовать, а вот с обычным сохранением без диалогового окна непонятно.
private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e) < if (saveFileDialog1.ShowDialog() == DialogResult.Cancel) return; // получаем выбранный файл string filename = saveFileDialog1.FileName; // сохраняем текст в файл System.IO.File.WriteAllText(filename, richTextBox1.Text); MessageBox.Show("Файл сохранен"); >private void открытьToolStripMenuItem_Click(object sender, EventArgs e) < if (openFileDialog1.ShowDialog() == DialogResult.Cancel) return; // получаем выбранный файл string filename = openFileDialog1.FileName; //читаем файл в строку string fileText = System.IO.File.ReadAllText(filename); richTextBox1.Text = fileText; MessageBox.Show("Файл открыт"); >private void сохранитьToolStripMenuItem1_Click(object sender, EventArgs e)
Отслеживать
задан 1 июн 2021 в 20:01
Мария Гормакова Мария Гормакова
23 5 5 бронзовых знаков
Сделайте filename полем формы. И по этому пути сохраняйте повторно.
1 июн 2021 в 20:12
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Достаточно запомнить имя сохраненного или загруженного ранее файла
private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e) < SaveFile(true); >private void открытьToolStripMenuItem_Click(object sender, EventArgs e) < if (openFileDialog1.ShowDialog() == DialogResult.Cancel) return; savedFileName = openFileDialog1.FileName; richTextBox1.Text = File.ReadAllText(savedFileName); MessageBox.Show("Файл открыт"); >private void сохранитьToolStripMenuItem1_Click(object sender, EventArgs e) < SaveFile(false); >private string savedFileName; private void SaveFile(bool saveAs) < if (saveAs || savedFileName == null) < if (saveFileDialog1.ShowDialog() == DialogResult.Cancel) return; savedFileName = saveFileDialog1.FileName; >File.WriteAllText(savedFileName, richTextBox1.Text); MessageBox.Show("Файл сохранен"); >
Еще советую не использовать русские буквы в названиях переменных, классов и прочих контролов.
Урок 15 windows forms. Работа с файлами
![]()
Выполнить: Разработайте приложение, которое сохраняет в файл информацию из списка (ListBox) и загружает из файла информацию обратно в список.

Пример выполнения:
[Название проекта: Lesson_15Lab1 , название файла L15Lab1.cs ]
- Поместите на форму элементы: список ListBox (lst), ListBox (lstFromfile) текстовое поле TextBox (txt), кнопки:btnAdd («Добавить элемент в список»), btnSave («Сохранить в файле»), btnOpen («Загрузить из файла»). Расположите правильно элементы (рисунок).
- Добавьте пространство имен для работы с файлами:
using System.IO;
1 2 3 4 5
private void btnAdd_Click(object sender, EventArgs e) { lst.Items.Add(txt.Text); txt.Clear(); }
private void btnAdd_Click(object sender, EventArgs e)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
private void btnSave_Click(object sender, EventArgs e) { string fileName = txtFileName.Text; // путь к файлу if (File.Exists(fileName)) { File.Delete(fileName); // если файл существует - удаляем его } using (FileStream fs = File.Create(fileName, 1024)) // класс для работы с файлами // класс для работы с данными файла в двоичной виде using(BinaryWriter bw = new BinaryWriter(fs)) { for (var i = 0; i lst.Items.Count; i++) // пока не конец списка { bw.Write(lst.Items[i].ToString()); // записываем в файл каждый пункт } bw.Close(); fs.Close(); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
private void btnOpen_Click(object sender, EventArgs e) { string fileName = txtFileName.Text; lstFromfile.Items.Clear(); using (FileStream fs = new FileStream(fileName, FileMode.Open)) using (BinaryReader br = new BinaryReader(fs)) { // метод PeekChar() возвращает следующий прочитанный символ // если символов нет - возвращается -1 while (br.PeekChar() != -1) { // добавляем в список очередную прочитанную строку lstFromfile.Items.Add(br.ReadString()); } br.Close(); fs.Close(); } }
- Запустите приложение, внесите в список lst несколько строк и попытайтесь сохранить их в файл (желательно с расширением .txt: например, proba.txt). Если не написан путь к файлу, то файл сохранится в папке /bin/Debug Вашего проекта.
Практическое руководство. Сохранение файлов с помощью элемента управления RichTextBox в Windows Forms
Элемент управления RichTextBox в Windows Forms может записывать сведения, отображаемые в одном из нескольких форматов:
- с обычным текстом;
- обычный текст Юникода;
- формат RTF (Rich Text Format);
- формат RTF с пробелами вместо объектов OLE;
- обычный текст с текстовым представлением объектов OLE.
Чтобы сохранить файл, вызовите метод SaveFile. Для сохранения данных в поток можно также использовать метод SaveFile. Дополнительные сведения см. в разделе SaveFile(Stream, RichTextBoxStreamType).
Сохранение содержимого элемента управления в файл
- Определите путь к сохраняемому файлу. Для этого в реальном приложении обычно используется компонент SaveFileDialog. Его обзор приведен в статье Общие сведения о компоненте SaveFileDialog.
- Вызовите метод SaveFile элемента управления RichTextBox, указав сохраняемый файл и при необходимости тип файла. Если вы вызываете метод с именем файла в качестве единственного аргумента, предполагается, что файл должен быть сохранен в формате RTF. Чтобы указать другой тип файла, вызовите метод со значением перечисления RichTextBoxStreamType в качестве второго аргумента. В следующем примере в качестве расположения RTF-файла выбрана папка Мои документы. Используется именно это расположение, поскольку предполагается, что большинство компьютеров, работающих под управлением операционной системы Windows, содержат этот каталог. Это также позволяет пользователям с минимальным уровнем доступа к системе безопасно запускать приложение. В приведенном ниже примере предполагается, что форма с элементом управления RichTextBox уже добавлена.
Public Sub SaveFile() ' You should replace the bold file name in the ' sample below with a file name of your own choosing. RichTextBox1.SaveFile(System.Environment.GetFolderPath _ (System.Environment.SpecialFolder.Personal) _ & "\Testdoc.rtf", _ RichTextBoxStreamType.RichNoOleObjs) End Sub
public void SaveFile() < // You should replace the bold file name in the // sample below with a file name of your own choosing. // Note the escape character used (@) when specifying the path. richTextBox1.SaveFile(System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) + @"\Testdoc.rtf", RichTextBoxStreamType.RichNoOleObjs); >
public: void SaveFile() < // You should replace the bold file name in the // sample below with a file name of your own choosing. richTextBox1->SaveFile(String::Concat (System::Environment::GetFolderPath (System::Environment::SpecialFolder::Personal), "\\Testdoc.rtf"), RichTextBoxStreamType::RichNoOleObjs); >
Важно! В этом примере создается файл (если файл отсутствует). Если приложению требуется создать файл, оно должно иметь доступ для создания к папке. Для задания разрешений используются списки управления доступом. Если файл уже существует, то приложению достаточно иметь лишь доступ для записи, т. е. меньшие привилегии. Безопаснее создавать файл во время развертывания, если это возможно, а также предоставлять доступ для чтения к отдельному файлу вместо доступа для создания к папке. По тем же соображениям рекомендуется записывать данные в пользовательские папки, а не в корневую папку или папку Program Files.
См. также
- RichTextBox.SaveFile
- RichTextBox
- Элемент управления RichTextBox
- Элементы управления для использования в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Как сохранить файл в c windows form
Окна открытия и сохранения файла представлены классами OpenFileDialog и SaveFileDialog . Они имеют во многом схожую функциональность, поэтому рассмотрим их вместе.
OpenFileDialog и SaveFileDialog имеют ряд общих свойств, среди которых можно выделить следующие:
- DefaultExt : устанавливает расширение файла, которое добавляется по умолчанию, если пользователь ввел имя файла без расширения
- AddExtension : при значении true добавляет к имени файла расширение при его отсуствии. Расширение берется из свойства DefaultExt или Filter
- CheckFileExists : если имеет значение true , то проверяет существование файла с указанным именем
- CheckPathExists : если имеет значение true , то проверяет существование пути к файлу с указанным именем
- FileName : возвращает полное имя файла, выбранного в диалоговом окне
- Filter : задает фильтр файлов, благодаря чему в диалоговом окне можно отфильтровать файлы по расширению. Фильтр задается в следующем формате Название_файлов|*.расширение. Например, Текстовые файлы(*.txt)|*.txt . Можно задать сразу несколько фильтров, для этого они разделяются вертикальной линией |. Например, Bitmap files (*.bmp)|*.bmp|Image files (*.jpg)|*.jpg
- InitialDirectory : устанавливает каталог, который отображается при первом вызове окна
- Title : заголовок диалогового окна
Отдельно у класса SaveFileDialog можно еще выделить пару свойств:
- CreatePrompt : при значении true в случае, если указан не существующий файл, то будет отображаться сообщение о его создании
- OverwritePrompt : при значении true в случае, если указан существующий файл, то будет отображаться сообщение о том, что файл будет перезаписан
Чтобы отобразить диалоговое окно, надо вызвать метод ShowDialog() .
Рассмотрим оба диалоговых окна на примере. Добавим на форму текстовое поле textBox1 и две кнопки button1 и button2. Также перетащим с панели инструментов компоненты OpenFileDialog и SaveFileDialog. После добавления они отобразятся внизу дизайнера формы. В итоге форма будет выглядеть примерно так:

Теперь изменим код формы:
public partial class Form1 : Form < public Form1() < InitializeComponent(); button1.Click += button1_Click; button2.Click += button2_Click; openFileDialog1.Filter = "Text files(*.txt)|*.txt|All files(*.*)|*.*"; saveFileDialog1.Filter = "Text files(*.txt)|*.txt|All files(*.*)|*.*"; >// сохранение файла void button2_Click(object sender, EventArgs e) < if (saveFileDialog1.ShowDialog() == DialogResult.Cancel) return; // получаем выбранный файл string filename = saveFileDialog1.FileName; // сохраняем текст в файл System.IO.File.WriteAllText(filename, textBox1.Text); MessageBox.Show("Файл сохранен"); >// открытие файла void button1_Click(object sender, EventArgs e) < if (openFileDialog1.ShowDialog() == DialogResult.Cancel) return; // получаем выбранный файл string filename = openFileDialog1.FileName; // читаем файл в строку string fileText = System.IO.File.ReadAllText(filename); textBox1.Text = fileText; MessageBox.Show("Файл открыт"); >>
По нажатию на первую кнопку будет открываться окно открытия файла. После выбора файла он будет считываться, а его текст будет отображаться в текстовом поле. Клик на вторую кнопку отобразит окно для сохранения файла, в котором надо установить его название. И после этого произойдет сохранение текста из текстового поля в файл.