Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Работа с файлами си шарп

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

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали немного о том, что такое модульное тестирование в Visual Studio. В данной статье я бы хотел рассказать о работе с файлами на C#. Всю работу с файлами можно разделить на 2 группы: 1) это работа с файлами, как с элементами файловой системы, например, найти файл, получить список файлов в директории, узнать дату изменения файла, различные его атрибуты, расширение, скопировать или удалить файл, создать новый. 2) это работа с содержимым файла: прочитать файл или записать в него что-нибудь.

Для выполнения всех этих операций существует несколько классов, расположенных в пространстве имён «System.IO».

Существует 2 класса File и FileInfo, которые предназначены для работы с файлом, как с частью файловой системы. Здесь также есть несколько методов, которые позволяют работать с содержимым файла целиком. В простых случаях (когда размеры файла небольшие, скажем до 1МБ) файл можно полностью прочитать и сохранить в память.

Некоторые методы по работе с файлами:
  • ReadAllText() . Самая простая операция — это прочитать файл целиком. Данный метод является статическим. Здесь в качестве параметра можно указать полный путь к файлу. Когда указываем путь к файлу, не забываем экранировать символ «».
  • ReadAllLines() . Этот статический метод возвращает массив строк, т.е. читает файл построчно.
  • WriteAllText() . Здесь в качестве параметра передаём строку, и эта строка целиком добавляется в файл с перезаписью содержимого файла.
  • AppendAllText() . Здесь содержимое добавляется поверх существующего файла, без его перезаписи.

Ниже приведен пример на эти методы. Для начала подготовим тестовый файл, который заполним названиями городов (Москва, Питер, Казань, Уфа, Стерлитамак). Имя каждого города находится на новой строке. Файл назовем «cities.txt» и расположим его в корне какого-нибудь диска (в моём случае — это диск «E»):

То, что можно сделать с помощью класса «File», можно сделать и с помощью класса «FileInfo», и наоборот. Почему же их два? Методы класса «File» — статические, а методы класса «FileInfo» являются методами объекта. При работе с методами класса «File» первым параметром всегда указывается путь до файла. В случае «FileInfo» — это имя указывается один раз в конструкторе при создании объекта. Если нужно выполнить разовую операцию, то лучше использовать класс «File». В случае работы со многими файлами лучше использовать «FileInfo».

Реализуем следующий алгоритм: необходимо вывести все файлы, даты изменения которых старше введенной пользователем даты. Будем рассматривать папку «C:WindowsSystem32». В ней много файлов. Тут нам потребуется получить все файлы этой директории. Забегая вперед скажу, что это можно сделать с помощью метода «GetFiles()» класса «DirectoryInfo».

Протестируйте работу данного скрипта.

Напишем ещё несколько примеров на работу с файлами:

  • Copy — копирование файла.
  • Delete — удаление файла.
  • Exists — проверка существования файла.

В качестве домашнего задания: переделайте последний пример только с использованием класса «FileInfo».

В данной статье вы узнали, как работать с файлами в C#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.

Раздел 2 Основы работы с файлами и директориями в C#

Глава 1 Использование контролов OpenFileDialog и SaveFileDialog для работы с файлами

Для изучения работы с контролами OpenFileDialog и SaveFileDialog создадим новое решение (подробно о создании проекта решения было раказано в первом разделе книги) или изменим уже ипользованный проект (убрав коды обработчиков событий нажатия кнопок, изменив надписи и картиночки) и поместим на форму контролы RichTextBox, OpenFileDialog и SaveFileDialog. Контролы OpenFileDialog и SaveFileDialog не визуальные и, потому, разместились ниже формы. Проект решения с которым будем работать примет вид, показанный на Рис.1.

Рис.1 Проект решения для работы с OpenFileDialog и SaveFileDialog

Дважды кликнем на форме (вне контролов) и, таким образом, создадим обработчик Form1_Load, который будет вызываться при каждой загрузки формы и который в дальнейшем будем часто использовать для начальной инициализации параметров программы и переменных. В обработчике запишем код очистки RichTextBox:

Обработчик нажатия кнопки 3 оставим прежний:

Читать еще:  Язык си классы

Параграф 1 Ипользование контрола OpenFileDialog

Основные свойства OpenFileDialog

Свойство AddExtension разрешает или запрещает автоматическое добавление расширение, указанное в свойстве DefaultExt.

Свойство DefaultExt — расширение, принятое по умолчанию для автоматического добавления к имени файла при AddExtension=true.

Свойство CheckFileExists — используется для получения или устанавки значения, указывающего отображать или нет диалоговое окно предупреждения, если пользователь указал в свойстве FileName имя файла, которого не существует в данной директории и нажал кнопку «Oткрыть» при невыбранном кликом мышки файле. При CheckFileExists=true вместо прерывания будет выдано сообщение, что такого файла нет и исключения не вызывается.

На Рис.2 показано окно предупреждение при FileName=a.doc, CheckFileExists=true и нажатии кнопки «Oткрыть» при невыбранном файле.

Рис.2 Окно предупреждения при CheckFileExists=true

Свойство FileName — имя файла по умолчанию для выборки если была нажата кнопка OK и не выбрн кликом мышки файл в окне диалога.

Свойство CheckPatchExists — используется для получения или устанавки значения, указывающего отображать или нет диалоговое окно предупреждения, если пользователь указал в свойстве FileName имя файла с несуществующим именем директории. Окно полностью анлогично показанному на Рис.2., например, при FileName=С:3a.doc и не выбранном файле в директории C: и нажатии кнопки «Oткрыть» будет выдано сообщение, поазанное на Рис.3. При CheckPatchExists=true вместо прерывания будет выдано только сообщение.

Рис.3 Окно предупреждения при CheckPatchExists=true

Свойство DereferenceLinks — используется для указания контролу что именно возвращпть при выборе файла ссылки — файл по ссылке (true) или файл самой сылки (false).

Свойства Filter, FilterIndex — фильтр для выбираемых файлов и индекс строки, отображаемой в окошечке «Имя файла». Например значение свойства заданного строкой при FilterIndex=1.

позволит выбрать только текстовые файлы в формате rtf или txt. В окошечке «Тип файла» будет только две строки:

а в окошечке «Имя файла» будет отображена первая.

Свойство InitialDirectory — директория, которая выбирается при старте OpenFileDialog.

Свойство MultiSelect — при значении true позволяет выбрать мышкой при нажатой кнопке Shift или Ctrl несколько файлов и сохранить их имена в свойстве FileNames в виде массива строк.

Свойство ReadOnlyChecked — при значении true позволяет открывать команде OpenFile выбранные файлы только в режиме чтения.

Свойство RestoreDirectory — при true диалоговое окно восстанавливает текущий каталог к первоначальному значению если пользователь изменил каталог при поиске файлов, при false — нет.

Свойство работает только если закрыт поток Stream, созданный методом openFileDialog1.OpenFile().

Свойство ShowHelp — при значении true в окне диалога отображается кнопка «Справка».

Свойство ShowReadOnly — при значении true в окне диалога отображается переключатель «Только для чтения».

Свойство Title — заголовок диалогового окна.

Свойство ValidateNames — при true проверяет допустимость имени для файла применительно к Win32. Никакое заданное по умолчанию в этом случае не добавляется.

Отметим, что ве свойcтва могут быть заданы на этапе проектирования и программно — путем присвоения соответствующих значений.

Загрузка содержимого файла с использованием OpenFileDialog

Утановим для OpenFileDialog следующие значения свойств:

    Filter — rtf файлы (*.rtf)|*.rtf

    Пометим в директорию C: какой либо файл в формате .rtf (например который был создан в первом разделе «a.tf») и загрузим его в RichTextBox. Для этого напишем в обработчике нажатия кнопки 1 следующий код:

    Ели мы выбрали файл C:a.rtf, то это имя отобразится в заглавии формы.

    Если теперь в войстве FileName запишем a.rtf, то при открытии диалога буковка «a» появляется в окошечке «Имя файла» и можно выполнить загрузку не выбирая мышкой файл, а сразу нажав кнопочку «OK».

    Дотаточно в войстве FileName записать a.doc и повторить то, что только что проделали выше, как получим предупреждение об отсутствии файла (см Рис.2) и файл уже придется выбирать кликом мышки (кстати, отетим еще раз, что если утановить войство CheckFileExists в false то получим возбуждение иключения).

    Рассмотрим еще один способ, который позволяет загружать фйлы в формате .txt. Добавим на форму контрол TextBox и установим его свойство MultiLine в true, в обработчике Form1_Load допишем строку

    а cвойству Filter присвоим значение

    Читать еще:  Цвета в паскаль авс

    В обработчике события нажатия кнопки 1 напишем код для чтения текстовых файлов.

    Ели прочитаем текстовый файл в формате .rtf, то увидим уже знакомое нам по первому разделу содержимое файла, а при чтении текстового файла в формате .txt именно текст (см Рис.4).

    Рис.4 Чтение файлов в формате .rtf(сле) и.txt(спрва) в ткстовом режиме

    Параграф 2 Ипользование контрола SaveFileDialog

    Основные свойства SaveFileDialog

    Следует отметить, что все свойства отображаемые в окне Proporties для SaveFileDialog аналогичны OpenFileDialog и имеют тоже назначение и тот же принцип использования, и, поэтому, в отдельном их расмотрении нет необходимости.

    Сохранение информации в файл с использованием SaveFileDialog

    Уcтановим для SaveFileDialog следующие значения свойств:

      Filter — rtf файлы (*.rtf)|*.rtf|txt файлы(*.txt)|*.txt

      Последнее актуально именно для SaveFileDialog и позволяет не задавать в окошечке «имя файла» полное имя если файл будет сохраняться как .rtf файл.

      Для обработчика события нажатия кнопки 2 нпишем следующий код:

      Обработка файлов в С#. NET

      Введение

      Статья объяснит Вам, как выполнять задачи по считыванию и введению файловой информации из разных областей, используя С#. .NET программирование API. Оно включает анализ структуры каталогов, определяет существующие папки и файлы, а также выполняет операции, связанные с файлами: перемещение, копирование и удаление объектов с диска. Цель статьи – определить типы, которые содержатся в области имен System.IO и объяснить, как разными способами можно считывать и вводить информацию в символьно-ориентированый, бинарный и строчный архив данных.

      Структура файловой системы

      Область имен System.IO состоит из 4 классов, которые помогут Вам оперировать конкретными файлами, работать с машинной структурой каталогов. Каталог адресов и файлов непосредственно наследует System.Object и поэтому выполняет задачи создания, копирования, перемещения и удаления файлов, используя при этом разные статические способы. Они содержат только статические методы, а главное то, что на их основе никогда не создаются экземпляры. Типы FileInfo и DirectotryInfo возникли от базового класса типа FileSystemInfo и обычно их используют, чтобы получить детальную информацию про файл или каталог, поскольку их элементы обычно настроены на возвращение типизованых объектов. Они используют те же общедоступные методы, что и каталог адресов и файлов, но могут сохранять данные, а элементы этих классов не статичные.

      В шаблоне .NET область имен System.IO выполняет роль библиотеки базовых классов, которая предназначена для производственных и исходящих услуг на базе файлов. Как и любая область имен, System.IO содержит большое количество классов, интерфейсов, нумераций, структур данных и их передачи. В таблице ниже представлены основные классовые типы данных:

      Этот класс используется для сохранения текстовой информации в файле.

      Классовые типыХарактеристика
      Хранилище/содержание каталоговКлассовые типы данных помогают управлять системой структуры каталогов.
      Информация про накопительЭтот класс данных предоставляет детальную информацию про накопители, которые содержатся в компьютере.
      Файловий потокКласс данных предоставляет Вам файл прямого доступа с информацией в виде потока байтов.
      Файл/сведения про файлКлассовые типы данных руководят файлами, которые содержатся в компьютере.
      ПутьЭтот класс выполняет операции в System.String, в котором содержится информация про файл и каталог независимо от платформы.
      Устройство двойного считывания/устройство двойного введения информацииКлассовые типы позволяют Вам сохранять и находить простые типы данных в виде двойных значений.
      Поток считывания/поток введения
      Строчная последовательность считывания/строчная последовательность введения информацииЭти классовые типы данных также работают с текстовой информацией. Однако, базовая система хранилища – скорее, строчный буфер, чем физический файл.
      Поток буферизацииВ этом типе можно лишь временно хранить поток байтов. Вы можете разместить данные в хранилище позже.

      В System.IO содержится класс DriveInfo, чтобы руководить системой диска во время произведения разных операций. Класс DriveInfo предоставляет детальную и полную информацию про количество дисков, общее пространство на жёстком диске, свободное пространство, название диска, состояние готовности и другое. Обратите внимание на следующую программу, которая показывает основные дисководы:

      DriveInfo[] di = DriveInfo.GetDrives();

      Console.WriteLine( «Total Partitions» );

      foreach(DriveInfo items in di)

      Следующие фрагменты кода отдельно выполняют все другие операции класса DriveInfo.

      Работа с файлами: Классы File и FileInfo

      Дата изменения: 10.10.2017

      Классы File и FileInfo – это часть системы ввода/вывода платформы .NET, которая инкапсулирует в себе объекты файловых операций: создание, чтение, запись, удаление файлов. Конкретно эти классы занимаются организацией работы с множествами файлов в файловой системе.

      Классы определены в пространстве имен System.IO и по сути являют собой расширение встроенных функций работы с файлами, определенными в mscorlib.dll. Для корректной работы приложений, использующих эти классы нужно включать пространство имен System.IO с помощью ключевого слова using следующим образом:

      Назначение классов

      Классы File и FileInfo рекомендуется применять, для операций с файлами общего типа, таких как:

      • Создание и удаление;
      • Копирование или перемещение;
      • Открытие и переименование;
      • Соединение двух файлов в одном;
      • Изменение атрибутов файла для файловой системы.

      Если необходима работа со строками и отельными символами, члены классов возвращают специальный объект для этого (например, StreamWriter).

      Различие между классами

      Кроется в механизме взаимодействия с ними. Так, все члены класса File – статические, поэтому он позволяет производить файловые операции без необходимости создавать объект типа. Все его методы требуют указания файлового пути, то есть адресной ссылки внутри файловой системы.

      Статичность методов класса File делает его использование предпочтительным в большинстве случаев, когда файловая операция – одиночная.

      Основные методы:

      • Create – создает файл;
      • Delete – удаляет файл;
      • Copy – копирует файл;
      • Move – перемещает файл;
      • Exist(file_path) – проверяет существует ли файл.

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

      Когда существует необходимость множественных действий с конкретным файлом, то безопасней и удобней создать объектную ссылку. Такой подход заключен в классе FileInfo. Функционал этого класса заметно шире благодаря более низкому положению в иерархии наследования типов внутри System.IO.

      Так, FileInfo кроме аналогичных методов класса File имеет ряд полезных свойств:

      • Length – возвращает размер файла;
      • Directory – возвращает ссылку на родительский каталог файла (объект типа DirectoryInfo);
      • DirectoryName – возвращает строку-путь к родительской дериктории;
      • Exist – проверяет существует ли файл и возвращает значение типа bool;
      • Свойство Extension – возвращает расширение файла;
      • Name и FullName: возвращают имя или полное имя файла.

      Оба класса являются потокобезопасными, однако сохранность значений внутри объектов, которые используют классы не гарантируются.

      Использование классов

      При использовании классов File и FileInfo следует помнить, что оба они работают с файловыми именами и путями к файлу. Последние часто передаются через обычную строку. Если пользовательский интерфейс программы предоставляет пользователю возможность самому вводить эти пути, то в программе должен быть блок проверки строки с путем соответствия правилам.

      Строка, которую используют члены классов File или FileInfo может включать себя путь к фалу или каталогу.

      Примеры правильной строки:

      Строка использующая путь к сетевому общему ресурсу выглядит следующим образом:

      Строка с путем к файлу в неправильно введенном формате вызовет исключение.

      Примеры использования

      Допустим у нас есть тривиальная задача – создание файла и запись в него, разделим его на 3 этапа:

      1. Проверим существует ли уже такой файл.
      2. Если нет, то создадим его и запишем в него строку.
      3. Откроем созданный файл и прочитаем строку, записанную нами ранее.

      Поскольку задача одиночная используем функционал класса File.

      В качестве пути к файлу мы использовали строковую переменную со значением: c:ExamplesFileTestApp.txt. Прежде чем использовать этот код, необходимо, чтобы директория c:Examples была создана. Проверить есть ли она невозможно средствами класса File, для этого используется класс Directory. Если каталога с таким именем не обнаружится, будет вызвано исключение.

      В следующем примере описано использование функционала класса FileInfo.

      Как видно из примера выше, использование ссылки на объект работы с фалом гораздо удобнее в случае если после записи или чтения из фала с ним нужно еще работать. Пример этой работы находится в блоке try/catch (копирование информации из файла в файл).

      Поскольку любое безопасное решение обращения к файлам – это выполнение его внутри блока обработки исключений, не придется создавать для каждой одиночной операции новый блок, если есть ссылка на объект.

      Ссылка на основную публикацию
      Adblock
      detector