C# Работа с файлами и кодировки

Иногда одна строчка кода стоит огромного количества сил и времени. Но зачем терять время на изобретение велосипедов. Ведь кто-то это уже точно писал до нас. Поэтому было принято волевое решение делать несколько постов в неделю, в которых я буду писать небольшие блоки кода, которые зачастую просто вылетают из головы в самый неподходящий момент. В одном выпуске будет 3-5 небольших блока кода с подробным описанием и особенностями использования.

Итак.. Начнем!

Файлы и директории

1. Получение списка файлов в папке

Есть много вариантов. Но мы рассмотрим два:

Directory.GetFiles(string path) возвращает массив строк, где каждая строка — это путь к файлу, который был найден в данном каталоге. Но данный код будет вести поиск только в данной папке, то есть файлы в подпапках учитываться не будут. Данный метод имеет возможность фильтрации. Например, если нам нужно отобразить только все картинки формата JPG — можно использовать следующий код:

Это уже позволяет осуществлять фильтрацию, однако это всё ещё поиск без подпапок. Внимательно посмотрев все перегрузки данного метода можно обнаружить, что его всё-таки можно заставить искать все содержимое данной папки. Для этого нужно просто добавить ещё один параметр:

SearchOption.AllDirectories. Если посмотреть какие вариант есть ещё, то окажется, что их всего два:

1) SearchOption.AllDirectories;

2) SearchOption.TopDirectoryOnly;

Как видно из названия — второй пункт используется по умолчанию.

Следующий код ищет все файлы в папке, включая те, что расположены в подпапках:

 

 2. Русская кодировка в файлах

Думаю все сталкивались с ситуацией, когда при чтении/записи русского текста выводились/сохранялись страшные символы не имеющие ничего общего с тем текстом, с которым вы работали.

Многие воспринимают это как «кривость», или «баг». Нет, ребята. Это не баг — это фича =).

Как все мы знаем — текст сохраняется в определенной кодировке. Где каждому возможному символу соответствует определенный байт (или даже 2 байта). Поэтому есть однобайтовые кодировки и двубайтные кодировки.

Преимущества и недостатки данных кодировок очевидны — однобайтная кодировка содержит в себе только 256 символов (один байт = 8 бит = 2^8 (так как бит равен или 0, или 1) = 256). Если предположить, что в алфавите 30 букв, то 3 алфавита — это 90 символов. Их нужно умножить на два, так как буквы могут быть маленькими и большими. Выходит 180 символов. Остается всего 76 символов. Выходит минус однобайтовой кодировки в том, что она сильно ограничена символами. А плюс, соответственно, в том, что она маловесна. И текст из 1000 символов будет иметь размер лишь 1000 байт. В то время у двубайтной кодировки вес будет уже 2000 байт. Зато у двубайтной кодировки уже возможно 65536 символов.

Именно из-за того, что кодировок много — каждому тяжело угодить даже с двубайтной кодировкой. Поэтому если вы хотите, чтобы российский текст корректно сохранялся и читался — нужно указывать необходимую кодировку. Обычно используется кодировка Windows-1251.

Код для чтения текста из файла:

Соответственно для записи:

Кстати насчет записи.. При объявлении StreamWriter используется 3 параметра. Первый — путь к файлу. Третий — указание кодировки. А второй таинственный false — является флагом дописывания в файл.

Если стоит false — то каждый раз при объявлении записи в данный файл его старое содержимое будет обнуляться.

Если стоит true — то всё будет дописываться.

То есть если ваша программа ведет лог ошибок, то лучше ставить true, чтобы пользователь мог посмотреть всю историю ошибок программы за весь период пользования.

bicycle

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

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