Гид по технологиям

Сохранение данных в CSV-файл из C#

6 min read C++ Обновлено 05 Jan 2026
Сохранение данных в CSV из C#
Сохранение данных в CSV из C#

CSV-файл с данными

Сохранение данных в файл — простой и мощный способ для последующего анализа и отчётности. В C# распространён формат CSV (comma-separated values), который представляет собой текстовый файл, где значения разделяются запятой (или другим разделителем). Такой файл удобно открыть в Excel или в любом текстовом редакторе и просмотреть в виде строк и столбцов.

Что такое CSV и как он хранит данные

CSV — текстовый формат, где каждая строка соответствует одной записи (строке таблицы), а столбцы разделяются разделителем, чаще всего запятой. Если значения содержат запятые или перевод строки, их обычно берут в кавычки “” и экранируют внутренние кавычки.

Ключевые моменты:

  • Каждая запись — отдельная строка в файле.
  • Разделитель по умолчанию — запятая, но может быть точка с запятой или табуляция в зависимости от локали.
  • Кодировка важна: для корректного отображения кириллицы используйте UTF-8 (часто с BOM для совместимости с Excel).

Быстрый пример формата

StringBuilder output = new StringBuilder();  
output.AppendLine(string.Join(",", new String[] { "1", "2", "3" }));  
// CSV File Output = 1,2,3

Создание консольного приложения и тестовых данных в Visual Studio

  1. Откройте Visual Studio и нажмите Create a new project. Создание нового консольного приложения
  2. Выберите Console Application и нажмите Next. Выбор шаблона консольного приложения
  3. Задайте имя проекта и место хранения. Нажмите Next. Диалог создания проекта в Visual Studio
  4. Оставьте Target Framework по умолчанию и нажмите Create — Visual Studio сгенерирует шаблон консольного приложения.
  5. Вверху файла добавьте пространства имён для работы с файлами и строками (если их нет):
using System.IO;  
using System.Text;
  1. Добавим класс для тестовых данных — Student. Этот код оставляем без перевода, т.к. это рабочий C# код:
public class Student  
{  
    public int StudentId;  
    public string FirstName;  
    public string LastName;  
    public string Dob;  
   
    public Student(int StudentId, string FirstName, string LastName, string Dob)  
    {  
        this.StudentId = StudentId;  
        this.FirstName = FirstName;  
        this.LastName = LastName;  
        this.Dob = Dob;  
    }  
}
  1. В методе Main() замените шаблонный код на массив студентов:
static void Main(string[] args)  
{  
    // Create an array with a list of students  
    Student[] students =  
    {  
        new Student(1, "John", "Smith", "03/04/1990"),  
        new Student(2, "Adam", "Van Houten", "07/07/1991"),  
        new Student(3, "Joey", "Richardson", "01/02/1992"),  
        new Student(4, "Matt", "Adams", "05/05/1992"),  
        new Student(5, "Jake", "Smith", "04/04/1994"),  
    };     
}

Важно: форматы дат в тестовом массиве приведены в формате MM/dd/yyyy — это пример данных. В продакшне согласуйте формат даты (например, ISO yyyy-MM-dd) и локаль.

Создание CSV-файла и добавление заголовков

  1. Внутри Main(), под массивом students, задайте путь к создаваемому файлу. Если файл не существует, он будет создан автоматически:
String file = @"C:\Users\Sharl\Desktop\Output.csv";
  1. Создайте StringBuilder и переменную разделителя:
String separator = ",";  
StringBuilder output = new StringBuilder();
  1. Добавьте заголовки столбцов и первую строку:
String[] headings = { "StudentID", "First Name", "Last Name", "Date Of Birth" };  
output.AppendLine(string.Join(separator, headings));

Добавление строк со значениями

  1. Для каждой записи students создайте строку и добавьте её в StringBuilder:
foreach (Student student in students)  
{  
}
  1. Соберите поля и форматируйте строку:
String[] newLine = { student.StudentId.ToString(), student.FirstName, student.LastName, student.Dob };  
output.AppendLine(string.Join(separator, newLine));
  1. Альтернативно, можно использовать string.Format (необходима осторожность с разделителем и экранированием):
string newLine = string.Format("{0}, {1}, {2}, {3}", student.StudentId.ToString(), student.FirstName, student.LastName, student.Dob);  
output.AppendLine(string.Join(separator, newLine));
  1. После цикла запишите данные в файл с обработкой ошибок:
try  
{  
    File.AppendAllText(file, output.ToString());  
}  
catch(Exception ex)  
{  
    Console.WriteLine("Data could not be written to the CSV file.");  
    return;  
}
  1. Сообщите пользователю об успешной записи:
Console.WriteLine("The data has been successfully saved to the CSV file");  

Примечание: File.AppendAllText добавляет данные в конец существующего файла. Для перезаписи используйте File.WriteAllText или StreamWriter с overwrite.

Как открыть и проверить CSV-файл

  1. Запустите программу (зелёная кнопка Run в Visual Studio). Запуск консольного приложения в Visual Studio
  2. После успешного выполнения перейдите в папку и откройте Output.csv в Excel для визуального просмотра в виде таблицы. CSV открыт в Excel
  3. Для проверки «сырых» данных откройте файл в текстовом редакторе, например Notepad++. CSV открыт в текстовом редакторе

Частые проблемы и как их решать

Важно:

  • Запятые внутри полей: если данные содержат запятые, берите поле в двойные кавычки и экранируйте внутренние кавычки.
  • Новые строки внутри полей: тоже требуют кавычек и корректного экранирования.
  • Кодировка: Excel на Windows ожидает часто UTF-8 с BOM или Windows-1251 для русских символов. Рекомендуем использовать UTF-8 с BOM для совместимости.
  • Разделитель в локали: в некоторых странах по умолчанию используется точка с запятой (;) вместо запятой — учитывайте это при экспорте.
  • Блокировка файла: если файл открыт в другой программе, запись может завершиться исключением — обрабатывайте IOException и ретрайте или уведомляйте пользователя.

Пример записи в файл с явной кодировкой и перезаписью:

using (var writer = new StreamWriter(file, false, new UTF8Encoding(true)))
{
    writer.Write(output.ToString());
}

Этот фрагмент создаст файл с BOM и перезапишет его (false во втором параметре означает overwrite).

Альтернативные подходы

  • Использовать библиотеку CsvHelper (пакет NuGet) — удобная и надёжная обёртка для сериализации объектов в CSV с поддержкой маппинга, кастомных разделителей и культур.
  • Формировать CSV потоково через CsvHelper или TextWriter для больших объёмов, чтобы не держать весь файл в памяти.
  • Экспорт в Excel напрямую (например, через OpenXML или EPPlus), если нужны стили и формулы.

Пример простого использования CsvHelper (упрощённо):

using (var writer = new StreamWriter(file, false, new UTF8Encoding(true)))
using (var csv = new CsvHelper.CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(students);
}

Когда CSV — не лучший выбор (контрпримеры)

  • Если данные содержат вложенные структуры (массивы, объекты) — лучше JSON или Parquet.
  • Для больших наборов данных, где важна колонночная компрессия и аналитика — Parquet/ORC.
  • Если нужна надёжность транзакций при записи — используйте базу данных.

Безопасность, права доступа и приватность

  • Ограничьте доступ к директории, где сохраняются CSV-файлы; не кладите конфиденциальные данные в публичные папки.
  • При экспорте персональных данных учитывайте требования GDPR/локального законодательства: минимизируйте поля и храните только необходимое.
  • Не логируйте чувствительные значения в открытые логи.
  • Для временных файлов используйте защищённые временные директории и удаляйте их по окончании работы.

Критерии приёмки (что проверить перед релизом)

  • Файл создаётся по указанному пути.
  • Заголовки присутствуют и в правильном порядке.
  • Все записи корректно экранированы (запятые, кавычки, переводы строк).
  • Кодировка UTF-8 позволяет корректно отобразить национальные символы в Excel и текстовых редакторах.
  • Поведение при ошибках: информативное сообщение и корректный возврат кода ошибки.

Чек-лист по ролям

Разработчик:

  • Использует StreamWriter или CsvHelper для больших данных.
  • Явно указывает кодировку.
  • Обрабатывает исключения IO.

Тестировщик:

  • Проверил данные с запятыми и кавычками.
  • Открыл файл в Excel, проверил разделители и кодировку.
  • Проверил поведение при отсутствии прав на запись.

Операции / DevOps:

  • Настроил ротацию/удаление старых экспортов.
  • Ограничил права доступа к папке экспорта.

Короткий метод (mini-methodology) — шаги для надёжного экспорта

  1. Решите формат данных и выбор разделителя (запятая/точка с запятой).
  2. Подготовьте модель (объект Student). Приводите даты к унифицированному формату (ISO).
  3. Используйте StreamWriter или CsvHelper, указывая UTF-8 BOM.
  4. Экранируйте поля с запятыми/кавычками.
  5. Тестируйте с разными локалями и открывайте в Excel.

1‑строчная глоссарий

  • CSV — текстовый формат, где записи разделяются строками, а поля внутри записи — указанным разделителем (обычно запятой).

Заключение

Сохранение данных в CSV из C# просто реализуется с помощью StringBuilder и File APIs, но надёжное решение требует учёта кодировки, экранирования и ограничений локали. Для продакшн-решений стоит использовать проверенные библиотеки вроде CsvHelper и предусмотреть безопасность и тестирование экспорта.

Важно: выбирайте формат данных в зависимости от конечной цели — для простого обмена и отчётов CSV отлично подходит; для сложной аналитики или вложенных структур — рассматривайте альтернативы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Скачать историю просмотров Netflix
Руководство

Скачать историю просмотров Netflix

Запустить Windows Mobile 6.5 на ПК
Мобильные ОС

Запустить Windows Mobile 6.5 на ПК

Apple Music Voice Plan — описание, ограничения, как пользоваться
Музыка

Apple Music Voice Plan — описание, ограничения, как пользоваться

Как удалить сразу несколько приложений на Mac
macOS

Как удалить сразу несколько приложений на Mac

Печать в Word: чёрно‑белая и градации серого
Инструкции

Печать в Word: чёрно‑белая и градации серого

Как сделать подкаст — руководство для начинающих
Подкасты

Как сделать подкаст — руководство для начинающих