Перейти к содержимому

C как сохранять данные

  • автор:

Использование Visual C# для чтения и записи в текстовый файл

В этой статье описано, как выполнить чтение и запись в текстовый файл с помощью Visual C#.

Оригинальная версия продукта: Visual Studio
Оригинальный номер базы знаний: 816149

Сводка

В разделе Чтение текстового файла этой статьи описывается, как использовать класс StreamReader для чтения текстового файла. В разделах Запись в текстовый файл (пример 1) и Запись в текстовый файл (пример 2) описывается, как использовать класс StreamWriter для записи текста в файл.

Чтение текстового файла

В следующем коде используется класс StreamReader для открытия, чтения и закрытия текстового файла. Можно передать путь к текстовому файлу в конструктор StreamReader для автоматического открытия файла. Метод ReadLine считывает каждую строку текста и перемещает указатель файла на следующую строку по мере чтения. Если метод ReadLine достигает конца файла, он возвращает пустую ссылку. Дополнительные сведения см. в разделе Класс StreamReader.

  1. Создайте пример текстового файла в Блокноте. Выполните приведенные ниже действия.
    1. Вставьте текст hello world в Блокнот.
    2. Сохраните файл как Sample.txt.
    using System.IO; 
    String line; try < //Pass the file path and file name to the StreamReader constructor StreamReader sr = new StreamReader("C:\\Sample.txt"); //Read the first line of text line = sr.ReadLine(); //Continue to read until you reach end of file while (line != null) < //write the line to console window Console.WriteLine(line); //Read the next line line = sr.ReadLine(); >//close the file sr.Close(); Console.ReadLine(); > catch(Exception e) < Console.WriteLine("Exception: " + e.Message); >finally
    Hello world 

    Запись в текстовый файл (пример 1)

    В следующем коде используется класс StreamWriter для открытия, записи и закрытия текстового файла. Аналогично тому, как используется класс StreamReader , можно передать путь к текстовому файлу в конструктор StreamWriter для автоматического открытия файла. Метод WriteLine записывает всю текстовую строку в текстовый файл.

    1. Запустите Visual Studio.
    2. В меню Файл выберите пункт Создать, а затем выберите Проект.
    3. Выберите Проекты Visual C# в разделе Типы проектов, а затем выберите Консольное приложение в разделе Шаблоны.
    4. Добавьте следующий код в начало файла Class1.cs:

    using System.IO; 
    try < //Pass the filepath and filename to the StreamWriter Constructor StreamWriter sw = new StreamWriter("C:\\Test.txt"); //Write a line of text sw.WriteLine("Hello World!!"); //Write a second line of text sw.WriteLine("From the StreamWriter class"); //Close the file sw.Close(); >catch(Exception e) < Console.WriteLine("Exception: " + e.Message); >finally
    Hello World!! From the StreamWriter class 

    Запись в текстовый файл (пример 2)

    В следующем коде используется класс StreamWriter для открытия, записи и закрытия текстового файла. В отличие от предыдущего примера, этот код передает в конструктор два дополнительных параметра. Первый параметр — путь к файлу и имя файла. Второй параметр, true , указывает, что файл открыт в режиме добавления. Если вы задаете false для второго параметра, содержимое файла перезаписывается при каждом запуске кода. Третий параметр задает Unicode , чтобы кодирование файла в StreamWriter выполнялось в формате Юникода. Можно также указать следующие методы кодирования для третьего параметра:

    Метод Write аналогичен методу WriteLine , за исключением того, что метод Write не вставляет автоматически сочетание символов возврата каретки или перевода строки (CR/LF). Это полезно, когда нужно одновременно записывать по одному символу.

    1. Запустите Visual Studio.
    2. В меню Файл выберите пункт Создать и затем пункт Проект.
    3. Нажмите Проекты Visual C# в разделе Типы проектов, а затем нажмите Консольное приложение в разделе Шаблоны.
    4. Добавьте следующий код в начало файла Class1.cs:

    using System.IO; using System.Text; 
    Int64 x; try < //Open the File StreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII); //Write out the numbers 1 to 10 on the same line. for(x=0; x < 10; x++) < sw.Write(x); >//close the file sw.Close(); > catch(Exception e) < Console.WriteLine("Exception: " + e.Message); >finally

    Полный код сборки для чтения текстового файла

    //Read a Text File using System; using System.IO; namespace readwriteapp < class Class1 < [STAThread] static void Main(string[] args) < String line; try < //Pass the file path and file name to the StreamReader constructor StreamReader sr = new StreamReader("C:\\Sample.txt"); //Read the first line of text line = sr.ReadLine(); //Continue to read until you reach end of file while (line != null) < //write the line to console window Console.WriteLine(line); //Read the next line line = sr.ReadLine(); >//close the file sr.Close(); Console.ReadLine(); > catch(Exception e) < Console.WriteLine("Exception: " + e.Message); >finally < Console.WriteLine("Executing finally block."); >> > > 

    Полный код сборки для записи в текстовый файл (версия 1)

    //Write a text file - Version-1 using System; using System.IO; namespace readwriteapp < class Class1 < [STAThread] static void Main(string[] args) < try < //Pass the filepath and filename to the StreamWriter Constructor StreamWriter sw = new StreamWriter("C:\\Test.txt"); //Write a line of text sw.WriteLine("Hello World!!"); //Write a second line of text sw.WriteLine("From the StreamWriter class"); //Close the file sw.Close(); >catch(Exception e) < Console.WriteLine("Exception: " + e.Message); >finally < Console.WriteLine("Executing finally block."); >> > > 

    Полный код сборки для записи в текстовый файл (версия 2)

    //Write a text file - Version 2 using System; using System.IO; using System.Text; namespace readwriteapp < class Class1 < [STAThread] static void Main(string[] args) < Int64 x; try < //Open the File StreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII); //Writeout the numbers 1 to 10 on the same line. for(x=0; x < 10; x++) < sw.Write(x); >//close the file sw.Close(); > catch(Exception e) < Console.WriteLine("Exception: " + e.Message); >finally < Console.WriteLine("Executing finally block."); >> > > 

    Устранение неполадок

    Перенос кода в блок try-catch-finally для обработки ошибок и исключений является хорошей практикой программирования, когда речь заходит о выполнении любых операций с файлом. В частности, может потребоваться освободить дескрипторы файла в окончательном блоке, чтобы файл не был заблокирован на неопределенный срок. Некоторые возможные ошибки включают файл, который не существует, или файл, который уже используется.

    Обратная связь

    Были ли сведения на этой странице полезными?

    C как сохранять данные

    Столкнулся с такой вот проблемой. У меня есть программа — генератор паролей. Как мне сохранить данные из консоли (желательно одну только переменную = parol) допустим на диск С с именем файла = этой переменной.. Главное чтобы никаких там дополнительных команд, чтобы программа справлялась своими силами.

    Форумчанин
    Регистрация: 13.12.2009
    Сообщений: 272

    #include ostream file("parol.txt"); // КАК вариант просто "parol" file (&parol), sizeof(parol));

    Если я помог вам — порадуйте меня, нажмите на весы слева
    Пользователь
    Регистрация: 26.09.2009
    Сообщений: 81

    Наверно я не правильно задал вопрос. Мне нужно сохранить одну единственную переменную (полученную во время работы программы) и имя файла = значению этой переменной.. Язык С

    Форумчанин
    Регистрация: 13.12.2009
    Сообщений: 272

    А ну тогда тебе надо значение этой переменной преобразовать в текст, например так как то
    stroka[0] = parol%10000+49 //если пароль например пятизначный
    stroka[1] = parol%1000+49 //уже вторая цифра и тд

    А потом файл создать с именем этой строки, FILE* f = fopen(stroka, w);

    Кажется, но я в си уже не силен

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

    Практическое руководство. Сохранение файлов с помощью компонента 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

    Как сделать сохранение данных на C#?

    Есть консольное приложение на c#. При каждом запуске человек вводит информацию о себе. Как сделать, чтобы все данные сохранялись и при следующем запуске уже не надо было их вводить?

    • Вопрос задан более трёх лет назад
    • 139 просмотров

    Комментировать

    Решения вопроса 1

    samodum

    Какой вопрос — такой и ответ

    Сохранять данные в файл или в базу данных.
    Неужели мой ответ будет решением? Удивительно!

    Ответ написан более трёх лет назад

    Комментировать

    Нравится 4 Комментировать

    Ответы на вопрос 0

    Ваш ответ на вопрос

    Войдите, чтобы написать ответ

    c#

    • C#
    • +1 ещё

    Как проверять столкновение префаба и UI панели в Unity?

    • 1 подписчик
    • 4 часа назад
    • 20 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *