Сохранение файла с помощью средства выбора
Используйте FileSavePicker , чтобы пользователи указали имя и расположение, в котором нужно сохранить файл.
Полный пример см. в примере средства выбора файлов.
Необходимые компоненты
- Общее представление об асинхронном программировании для приложений универсальной платформы Windows (UWP). Вы можете узнать, как писать асинхронные приложения в C# или Visual Basic, см . статью «Вызов асинхронных API» в C# или Visual Basic. Сведения о написании асинхронных приложений в C++см. в статье «Асинхронное программирование» в C++.
- Права доступа к расположению См . разрешения на доступ к файлам.
FileSavePicker: пошаговые шаги
Используйте FileSavePicker, чтобы пользователи могли указать имя, тип и расположение файла для сохранения. Создание, настройка и отображение объекта средства выбора файлов, а затем сохранение данных с помощью возвращаемого объекта служба хранилища File, представляющего выбранный файл.
-
Создание и настройка FileSavePicker
var savePicker = new Windows.Storage.Pickers.FileSavePicker(); savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary; // Dropdown of file types the user can save the file as savePicker.FileTypeChoices.Add("Plain Text", new List() < ".txt" >); // Default file name if the user does not type one in or select a file to replace savePicker.SuggestedFileName = "New Document";
Задайте свойства объекта средства выбора файлов, относящиеся к пользователям и приложению. В этом примере задаются три свойства: SuggestedStartLocation, FileTypeChoices и SuggestedFileName.
- Так как пользователь сохраняет документ или текстовый файл, образец задает ПредложениеStartLocation в локальную папку приложения с помощьюLocalFolder. Задайте для параметра SuggestedStartLocation расположение, соответствующее типу сохраненного файла, например «Музыка», «Изображения», «Видео» или «Документы». В начальном расположении пользователь может перейти к другим расположениям.
- Так как мы хотим убедиться, что приложение может открыть файл после его сохранения, мы используем FileTypeChoices для указания типов файлов, поддерживаемых примером (документы и текстовые файлы Microsoft Word). Убедитесь, что все указанные типы файлов поддерживаются приложением. Пользователи смогут сохранить файл как любой из указанных типов файлов. Они также могут изменить тип файла, выбрав другой из указанных типов файлов. Первый выбор типа файла в списке будет выбран по умолчанию: для управления этим, задайте свойство DefaultFileExtension .
Примечание. Средство выбора файлов также использует текущий выбранный тип файла как фильтр отображения. Таким образом отображаются только типы файлов, соответствующие выбранным.
Объекты FileSavePicker отображают средство выбора файлов с помощью режима просмотра PickerViewMode.List.
- Отобразите FileSavePicker и сохраните выбранный файл. Отображение средства выбора файлов путем вызова PickSaveFileAsync. Когда пользователь указывает имя, тип файла и расположение, а также подтверждает сохранение файла, PickSaveFileAsync возвращает объект служба хранилища File, представляющий сохраненный файл. Вы можете записать и обработать этот файл теперь, когда у вас есть доступ на чтение и запись.
Windows.Storage.StorageFile file = await savePicker.PickSaveFileAsync(); if (file != null) < // Prevent updates to the remote version of the file until // we finish making changes and call CompleteUpdatesAsync. Windows.Storage.CachedFileManager.DeferUpdates(file); // write to file await Windows.Storage.FileIO.WriteTextAsync(file, file.Name); // Let Windows know that we're finished changing the file so // the other app can update the remote version of the file. // Completing updates may require Windows to ask for user input. Windows.Storage.Provider.FileUpdateStatus status = await Windows.Storage.CachedFileManager.CompleteUpdatesAsync(file); if (status == Windows.Storage.Provider.FileUpdateStatus.Complete) < this.textBlock.Text = "File " + file.Name + " was saved."; >else < this.textBlock.Text = "File " + file.Name + " couldn't be saved."; >> else
В примере проверка допустимый файл и записывает в него собственное имя файла. См. также статью «Создание, запись и чтение файла».
Следует всегда проверять сохраненный файл на допустимость, прежде чем выполнять дальнейшую обработку. Затем вы можете сохранить содержимое в файл в соответствии с вашим приложением и указать соответствующее поведение, если выбранный файл недопустим.
Практическое руководство. Сохранение файлов с помощью компонента SaveFileDialog
Компонент SaveFileDialog позволяет пользователям просматривать файловую систему и выбирать файлы для сохранения. Диалоговое окно возвращает путь и имя файла, который пользователь выбрал в диалоговом окне. Тем не менее для фактического сохранения файла на диск необходимо написать специальный код.
Сохранение файла с помощью компонента SaveFileDialog
- Выведите на экран диалоговое окно Сохранить файл и вызовите метод для сохранения файла, выбранного пользователем. Для сохранения файла нужно использовать имеющийся в компоненте SaveFileDialog метод OpenFile. Этот метод предоставляет объект Stream, в который можно выполнить запись. В примере ниже показано, как для получения имени файла использовать свойство DialogResult, а метод OpenFile для сохранения файла. Метод OpenFile предоставляет поток для записи в него файла. В следующем примере приведен элемент управления Button, которому назначено изображение. При нажатии кнопки SaveFileDialog создается экземпляр компонента с фильтром, допускающим форматы файлов GIF, JPEG и BMP. При выборе файла такого типа в диалоговом окне «Сохранить файл» изображение кнопки сохраняется.
Важно! Для получения или задания свойства FileName сборке нужен уровень привилегий, предоставляемый классом System.Security.Permissions.FileIOPermission. Если процесс выполняется в контексте с частичным доверием, он может сгенерировать исключение из-за недостатка привилегий. Дополнительные сведения см. в разделе Code Access Security Basics.
В примере предполагается, что у формы есть элемент управления Button со свойством Image, заданным для файлов с типом GIF, JPEG и BMP.
Примечание. Имеющееся у класса FileDialog свойство FilterIndex (которое вследствие наследования является частью класса SaveFileDialog) использует отсчитываемый от единицы индекс. Это важно при написании кода для сохранения данных в определенном формате (например, в формате обычного текста или двоичном формате). Это свойство представлено в следующем примере.
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click ' Displays a SaveFileDialog so the user can save the Image ' assigned to Button2. Dim saveFileDialog1 As New SaveFileDialog() saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif" saveFileDialog1.Title = "Save an Image File" saveFileDialog1.ShowDialog() ' If the file name is not an empty string open it for saving. If saveFileDialog1.FileName <> "" Then ' Saves the Image via a FileStream created by the OpenFile method. Dim fs As System.IO.FileStream = Ctype _ (saveFileDialog1.OpenFile(), System.IO.FileStream) ' Saves the Image in the appropriate ImageFormat based upon the ' file type selected in the dialog box. ' NOTE that the FilterIndex property is one-based. Select Case saveFileDialog1.FilterIndex Case 1 Me.button2.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Jpeg) Case 2 Me.button2.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Bmp) Case 3 Me.button2.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Gif) End Select fs.Close() End If End Sub
private void button2_Click(object sender, System.EventArgs e) < // Displays a SaveFileDialog so the user can save the Image // assigned to Button2. SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"; saveFileDialog1.Title = "Save an Image File"; saveFileDialog1.ShowDialog(); // If the file name is not an empty string open it for saving. if(saveFileDialog1.FileName != "") < // Saves the Image via a FileStream created by the OpenFile method. System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile(); // Saves the Image in the appropriate ImageFormat based upon the // File type selected in the dialog box. // NOTE that the FilterIndex property is one-based. switch(saveFileDialog1.FilterIndex) < case 1 : this.button2.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg); break; case 2 : this.button2.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp); break; case 3 : this.button2.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Gif); break; >fs.Close(); > >
private: System::Void button2_Click(System::Object ^ sender, System::EventArgs ^ e) < // Displays a SaveFileDialog so the user can save the Image // assigned to Button2. SaveFileDialog ^ saveFileDialog1 = new SaveFileDialog(); saveFileDialog1->Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"; saveFileDialog1->Title = "Save an Image File"; saveFileDialog1->ShowDialog(); // If the file name is not an empty string, open it for saving. if(saveFileDialog1->FileName != "") < // Saves the Image through a FileStream created by // the OpenFile method. System::IO::FileStream ^ fs = safe_cast\( saveFileDialog1->OpenFile()); // Saves the Image in the appropriate ImageFormat based on // the file type selected in the dialog box. // Note that the FilterIndex property is one based. switch(saveFileDialog1->FilterIndex) < case 1 : this->button2->Image->Save(fs, System::Drawing::Imaging::ImageFormat::Jpeg); break; case 2 : this->button2->Image->Save(fs, System::Drawing::Imaging::ImageFormat::Bmp); break; case 3 : this->button2->Image->Save(fs, System::Drawing::Imaging::ImageFormat::Gif); break; > fs->Close(); > >
(Visual C# и Visual C++) Поместите следующий код в конструктор формы для регистрации обработчика событий.
this.button2.Click += new System.EventHandler(this.button2_Click);
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
Дополнительные сведения о записи файловых потоков см. в разделах BeginWrite и Write.
Примечание. У отдельных элементов управления, например у RichTextBox, имеется возможность сохранения файлов.
См. также
- SaveFileDialog
- Компонент SaveFileDialog
Как сохранять данные в файл С++ [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 4 года назад .
Я сделал простой цикл который считает числа и мне надо реализовать сохранения и загрузку данных. Надо что бы данные как то сохранялись и если я отключил цикл а потом снова запустил он продолжил считать.
for (size_t i = 0; i
Не обязательно простые примеры кидать, можно супер сложные я разберусь.
Отслеживать
задан 21 апр 2019 в 18:40
90 1 1 серебряный знак 8 8 бронзовых знаков
Ну делаем что-то типа for (size_t i = loadSavedValue(); i < 10000000; i++) < if (i % 10000 == 0) saveValue(i); >
21 апр 2019 в 18:43
@harry а можно более детально, я думал что это должно работать как то с fstream но я не уверен.
21 апр 2019 в 18:46
И еще интересно можно какие то другие данные получать а не числа, например может быть байты.
21 апр 2019 в 18:47
Возможный дубликат вопроса: Книги и учебные ресурсы по С++
21 апр 2019 в 18:47
В книги точно не будет того что мне нужно
21 апр 2019 в 18:51
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Ну вот вам пример — прерываете программу, она при новом запуске будет продолжать работу с последнего сохраненного значения.
#include #include using namespace std; int main(int argc, const char * argv[]) < long long current_value = 1; double current_sum = 0.0; < ifstream in("data"); if (in.is_open()) < in >> current_value >> current_sum; > > for(long long i = current_value; ; ++i) < current_sum += 1.0/i; if (i % 10000 == 0) < ofstream out("data"); out > >
В каждом конкретном случае надо смотреть, как сохранять и восстанавливать состояние.
В свое время еще под DOS’ом мне попадался код, который тупо сохранял всю память и состояние процессора, но в современных операционках, по-моему, это будет слишком сложным решением.
Как сохранить в файл данные в мою папку в онлайн с++ компиляторах ?
В обоих онлайн компиляторах сработал код. Но нет файла у меня на компе.
PS: Может кто знает еще другие сайты онлайн компиляторов, которые могут сохранять в файл.
#1
14:19, 10 янв 2019
#2
14:54, 10 янв 2019
ronniko
> В обоих онлайн компиляторах сработал код. Но нет файла у меня на компе.
Не может быть. Они же сохранились. Попробуй переставь винду!
#3
14:58, 10 янв 2019
выводи на экран вместо файла.
#4
15:01, 10 янв 2019
Даты будет на 2 метра.
Хотелось бы в файл писать.
#5
15:06, 10 янв 2019
ronniko
как ты себе это представляешь? Чтобы они после завершения программы предлагали скачать тебе полученный файл? 🙂 Если там разрешена работа с сетью (в чем я сильно сомневаюсь), то можешь попробовать слать данные себе на комп.
#6
16:16, 10 янв 2019
Сомневаюсь, что там вообще работа с файлами разрешена.
#7
16:42, 10 янв 2019
Слева панель с файлами проекта. Обновить -> Download file
#8
17:10, 10 янв 2019
Ogra спасибо !
Помог.
Теперь могу сохранить к себе output файл.
2 метра ждал 15 секунд пока заполнит. И потом скачал быстро.