Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 12.10.2011
Сообщений: 93
1

Сохранение файла с выбором имени

11.11.2011, 17:40. Показов 5836. Ответов 14
Метки нет (Все метки)

У меня на форме есть TabControl, одна из его вкладок это большой текстбок.
Сверху формы ToolStripMenuItem (файл --> Сохранить файл)
Мне нужно при нажатии на <сохранить файл> чтобы открывалось диалоговое окно, там нужно было выбрать .txt file и в него записать весь текст из текстбокса вкладки.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2011, 17:40
Ответы с готовыми решениями:

Создание (сохранение) файла без перезаписи с добавлением цифры к имени файла
Как реализовать в программе возможность сохранения файла без удаления старого(одноимённого файла) ...

Сохранение файла Excel с квадратными скобками в имени
Добрый день Подскажите как сохранить с квадратными скобками ? пишет типо нельзя ...

Сохранение части имени файла в текстовый документ
Доброе время суток, друзья кодеры! У начинающего, но уже влюбленного в программирование коллеги...

Сохранение файла с увеличением его номера в имени!
procedure TForm1.Button3Click(Sender: TObject); begin...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
14
Эксперт .NET
14877 / 11263 / 2951
Регистрация: 17.09.2011
Сообщений: 18,863
11.11.2011, 18:03 2
C#
1
2
3
4
5
6
using (var dialog = new SaveFileDialog())
{
   dialog.Filter = "Text files|*.txt|All Files|*.*";
   if (dialog.ShowDialog(this) == DialogResult.OK)
      File.WriteAllText(dialog.FileName, textBox.Text);
}
0
6021 / 3428 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
12.11.2011, 19:21 3
Цитата Сообщение от WST_Lucifer Посмотреть сообщение
одна из его вкладок это большой текстбок
может лучше RichTextBox использовать?
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 837
07.03.2017, 14:09 4
Дабы не плодить темы, оставлю здесь. Мне нужно наоборот. Сохранить как я сделал. Мне необходимо сделать кнопку Save, чтобы сохраняло текущий файл открытый в RichTextBox.
Вот код, который я использую для Save As:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 private void sAsButton_Click(object sender, EventArgs e)
        {
           
            SaveFileDialog sFile = new SaveFileDialog();
 
          
            sFile.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            try
            {
               
                if (sFile.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
                   sFile.FileName.Length > 0)
                {
                  
                    FirmwBuffer.SaveFile(sFile.FileName, RichTextBoxStreamType.PlainText);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error", ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
        }
0
613 / 506 / 316
Регистрация: 20.05.2015
Сообщений: 1,422
07.03.2017, 14:18 5
Jman, И что не так?
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 837
07.03.2017, 14:25 6
Цитата Сообщение от Aferuga Посмотреть сообщение
И что не так?
Все так, только это работает в режиме возможности пересохранения файла под другим именем например. А мне нужно как типо в MS WORD, нажал сохранить, и файлик сам сохраняется без вывода диалогового окна и бла-бла-бла.
0
613 / 506 / 316
Регистрация: 20.05.2015
Сообщений: 1,422
07.03.2017, 14:44 7
Просто подставить путь вместо sFile.FileName
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 837
07.03.2017, 14:45 8
Цитата Сообщение от Aferuga Посмотреть сообщение
Просто подставить путь вместо sFile.FileName
Как сделать, что бы автоматически понимал путь файла, с которым работаю?
0
613 / 506 / 316
Регистрация: 20.05.2015
Сообщений: 1,422
07.03.2017, 14:50 9
При открытии файла сохраняйте путь к файлу в глобальной строковой переменной.
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 837
07.03.2017, 14:58 10
Цитата Сообщение от Aferuga Посмотреть сообщение
При открытии файла сохраняйте путь к файлу в глобальной строковой переменной.
Можете помочь с реализацией? Как это кодом сделать?
0
613 / 506 / 316
Регистрация: 20.05.2015
Сообщений: 1,422
07.03.2017, 15:08 11
C#
1
2
3
4
5
        private string filename; //объявляем глобальную переменную
        public Form4()
        {
            InitializeComponent();
}
Ну и там где читаем файл
C#
1
2
filename= oFile.FileName;
                            FirmwBuffer.Text = (sr.ReadToEnd());
0
Эксперт .NET
14877 / 11263 / 2951
Регистрация: 17.09.2011
Сообщений: 18,863
07.03.2017, 21:50 12
Цитата Сообщение от Jman Посмотреть сообщение
мне нужно как типо в MS WORD, нажал сохранить, и файлик сам сохраняется без вывода диалогового окна
В условии поменяйте операторы местами и замените && на ||.

Проверку длины файла можно тоже заменить на string.IsNullOrEmpty(sFile.FileName)
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 837
12.04.2017, 15:08 13
Цитата Сообщение от kolorotur Посмотреть сообщение
В условии поменяйте операторы местами и замените && на ||.
Не помогло.
Смотрите, я сейчас то же делаю в WPF; Вот обработчик сохранения файла.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  private void saveClick(object sender, RoutedEventArgs e)
        {
            const string caption = "Error!";
            SaveFileDialog dialog = new SaveFileDialog();
            var readDataFromDB = StudentManager.ReadData();
 
            dialog.Filter = "CSV Files(*.csv)|*.csv|All(*.*)|*";
            dialog.RestoreDirectory = true;
            dialog.InitialDirectory = dialog.FileName;
 
            try
            {
                if (dialog.ShowDialog() == true)
                {
                    string path = dialog.FileName;
                    StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.GetEncoding(1251));
                    using (sw)
                    {
                        foreach (var item in readDataFromDB)
                        {
                            sw.Write(item.Name + ",");
                            sw.Write(item.SecondName + ",");
                            sw.Write(item.DepartmentId + ",");
                        }
                   
                    }
                        
                }
        
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error! " + ex.Message, caption, MessageBoxButton.OK, MessageBoxImage.Error);
            }
 
 
 
        }
Даже если ввести условие по OR
string.IsNullOrEmpty(dialog.FileName)
Всегда открывается диалоговое окно.
0
Эксперт .NET
14877 / 11263 / 2951
Регистрация: 17.09.2011
Сообщений: 18,863
12.04.2017, 15:58 14
Jman, сохраняйте путь файла при открытии и при нажатии кнопки проверяйте: если путь не пуст, то сохраняйте по указанному, в противном случае показывайте диалог.

Как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
string currentFile;
 
void openClick(object sender, RoutedEventArgs e)
{
   var dialog = new OpenFileDialog();
   dialog.Filter = "CSV Files(*.csv)|*.csv|All(*.*)|*";
   dialog.RestoreDirectory = true;
 
   if (dialog.ShowDialog())
   {
      currentFile = dialog.FileName;
      
      // Загрузка файла в ritchtextbox
   }
}
 
void saveClick(object sender, RoutedEventArgs e)
{
            const string caption = "Error!"; 
            try
            {
                    string path = GetPath();
                    if (string.IsNullOrEmpty(path)) return;
 
                    currentFile = path;
                    StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.GetEncoding(1251));
                    using (sw)
                    {
                        foreach (var item in readDataFromDB)
                        {
                            sw.Write(item.Name + ",");
                            sw.Write(item.SecondName + ",");
                            sw.Write(item.DepartmentId + ",");
                        }
                   
                    }        
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error! " + ex.Message, caption, MessageBoxButton.OK, MessageBoxImage.Error);
            }
}
 
string GetPath()
{
            if (string.IsNullOrEmpty(currentFile))
            {
               SaveFileDialog dialog = new SaveFileDialog();
               var readDataFromDB = StudentManager.ReadData();
 
               dialog.Filter = "CSV Files(*.csv)|*.csv|All(*.*)|*";
               dialog.RestoreDirectory = true;
               dialog.InitialDirectory = dialog.FileName;
               if (dialog.ShowDialog())
                  return dialog.FileName;
               return null;
            }
 
            return currentFile;
}
1
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 837
12.04.2017, 17:18 15
Спасибо! Все работает. Правда есть проблема с форматированием данных при сохранении. Но думаю решу вопрос.
Вынес в отдельный класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 class SaveFile
    {
        private string CurrentFile { get; set; }
 
        public SaveFile(string currentFile)
        {
            this.CurrentFile = currentFile;
        }
 
 
        public string GetPath()
        {
            if (string.IsNullOrEmpty(CurrentFile))
            {
                SaveFileDialog dialog = new SaveFileDialog();
                dialog.Filter = "CSV Files(*.csv)|*.csv|All(*.*)|*";
                dialog.RestoreDirectory = true;
                dialog.InitialDirectory = dialog.FileName;
                if (dialog.ShowDialog() == true)
                    return dialog.FileName; 
                return null;
            }
 
            return CurrentFile;
        }
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2017, 17:18

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Сохранение изображения: System.NotSupportedException при использование в имени файла Date.Time
private void SaveOpenGlPole() { string time = DateTime.Now.ToString(); string str1, str2, str3;...

Как сделать проверку на наличие похожего имени файла и запрос нового имени файла?
При загрузке изображения присваивается имя foto.jpg. Вопрос, как сделать проверку на то что фото с...

Сделать проверку на наличие похожего имени файла и запрос нового имени файла
Пользователь задает имя для создания файла. Вопрос, как сделать проверку на наличие похожего имени...

Сохранение и открытие с выбором места
Всем добрый день! Написал я прогу, она сохраняет и открывает файл с заданным именем. Как сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.