Как вывести данные в файл c#. Работа с потоками и файловой системой

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

Фреймворк.NET предоставляет большие возможности по управлению и манипуляции файлами и каталогами, которые по большей части сосредоточены в пространстве имен System.IO . Классы, расположенные в этом пространстве имен (такие как Stream, StreamWriter, FileStream и др.), позволяют управлять файловым вводом-выводом.

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

Один из способов представить архив проекта - это набор деревьев. Представьте себе ряд номеров ревизий, начиная с 0, проходящих слева направо. На каждом номере ревизии есть файловое пространство, и каждое из этих деревьев является «моментальным снимком» того, как архив проекта просматривал каждую передачу.

Работа с дисками

Работу с файловой системой начнем с самого верхнего уровня - дисков. Для представления диска в пространстве имен System.IO имеется класс DriveInfo .

Этот класс имеет статический метод GetDrives , который возвращает имена всех логических дисков компьютера. Также он предоставляет ряд полезных свойств:

    AvailableFreeSpace : указывает на объем доступного свободного места на диске в байтах

    В отличие от многих других систем управления версиями номера версий затрагивают целые файловые пространства, а не отдельные файлы. Каждая ревизия идентифицирует полное файловое пространство, определенное состояние архива проекта после передачи. Обратите внимание, что две разные версии файла не должны быть разными! Важно отметить, что рабочие графики не всегда согласуются с одной ревизией архивов проектов; они могут содержать файлы из разных версий. Например, предположим, что вы проверили рабочую область из архива проекта, где последняя версия 4.

    DriveFormat : получает имя файловой системы

    DriveType : представляет тип диска

    IsReady : готов ли диск (например, DVD-диск может быть не вставлен в дисковод)

    Name : получает имя диска

    TotalFreeSpace : получает общий объем свободного места на диске в байтах

    TotalSize : общий размер диска в байтах

    VolumeLabel : получает или устанавливает метку тома

    Как рабочие файлы следуют за архивами проектов

    В настоящий момент рабочее пространство точно соответствует версии 4 в архиве проекта. Предположим, что никаких дальнейших изменений не было сделано, и ваша передача создает новую редакцию 5 в архиве проекта. Ваша работа будет выглядеть следующим образом. Если вы сейчас обновите свое рабочее пространство, оно будет выглядеть так. Итак, после того, как вы сделали чистое обновление, ваше рабочее пространство будет точно соответствовать ревизии в архиве проекта. Версия, на которой основан ваш рабочий файл, и время последнего обновления файла из архива проекта. Файл не был изменен ни локально, ни в архиве проекта.

Получим имена и свойства всех дисков на компьютере:

Using System; using System.Collections.Generic; using System.IO; namespace FileApp { class Program { static void Main(string args) { DriveInfo drives = DriveInfo.GetDrives(); foreach (DriveInfo drive in drives) { Console.WriteLine("Название: {0}", drive.Name); Console.WriteLine("Тип: {0}", drive.DriveType); if (drive.IsReady) { Console.WriteLine("Объем диска: {0}", drive.TotalSize); Console.WriteLine("Свободное пространство: {0}", drive.TotalFreeSpace); Console.WriteLine("Метка: {0}", drive.VolumeLabel); } Console.WriteLine(); } Console.ReadLine(); } } }

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

Файл был изменен локально и в архиве проекта. Сообщение об ошибке больше не будет сбой. Сначала необходимо обновить файл, чтобы вставить изменения из архива проекта в локальную копию. Вам нужен список всех доступных в настоящее время дисков? Объект привода по-прежнему содержит множество интересных функций и методов.

Класс Filelnfo предназначен для организации доступа к физическому файлу, который содержится на жестком диске компьютера. Он позволяет получать информацию об этом файле (например, о времени его создания, размере, атрибутах и т. п.), а также производить различные операции, например, по созданию файла или его удалению. Класс FileInfo наследует члены класса FileSystemInfo и содержит дополнительный набор членов, который приведен в следующей таблице:

Информация о конкретном драйвере. Сначала мы определяем, для какого из доступных дисков должны быть считаны свойства. Затем мы определяем общее пространство для хранения, а также свободное пространство. Какой тип диска действительно и какая файловая система используется?

Найдите путь и корневой каталог диска. Подробнее об объекте «Папка» после собрания объекта «Диск». Если диск является сетевым диском, общее имя может быть определено следующим образом. Наконец, мы хотели бы определить имя носителя данных, а также серийный номер накопителя.

Член Описание
AppendText() Создает объект StreamWriter для добавления текста к файлу
CopyTo() Копирует уже существующий файл в новый файл
Create() Создает новый файл и возвращает объект FileStream для взаимодействия с этим файлом
CreateText() Создает объект StreamWriter для записи текстовых данных в новый файл
Delete() Удаляет файл, которому соответствует объект FileInfo
Directory Возвращает каталог, в котором расположен данный файл
DirectoryName Возвращает полный путь к данному файлу в файловой системе
Length Возвращает размер файла
MoveTo() Перемещает файл в указанное пользователем место (этот метод позволяет одновременно переименовать данный файл)
Name Позволяет получить имя файла
Ореn() Открывает файл с указанными пользователем правами доступа на чтение, запись или совместное использование с другими пользователями
OpenRead() Создает объект FileStream , доступный только для чтения
OpenText() Создает объект StreamReader (о нем также будет рассказано ниже), который позволяет считывать информацию из существующего текстового файла
OpenWrite() Создает объект FileStream , доступный для чтения и записи

Как мы видим, большинство методов FileInfo возвращает объекты (FIleStream , StreamWriter , StreamReader и т. п.), которые позволяют различным образом взаимодействовать с файлом, например, производить чтение или запись в него. Приемы работы с данными потоками нам уже известны. Поэтому рассмотрим другие возможности класса FileInfo .

using System; using System.Text; using System.IO; //для работы с файловым вводом-выводом using System.Text.RegularExpressions; namespace MyProgram { class Program { static void Main() { //создаем новый файл и связываем с ним строковый поток FileInfo f = new FileInfo("text.txt"); StreamWriter fOut = new StreamWriter(f.Create()); //записываем в файл данные и закрываем строковый поток, // при этом связь с физическим файлом для f не рвется fOut.WriteLine("ОДИН ДВА ТРИ..."); fOut.Close(); //получаем информацию о файле Console.WriteLine("*******"+f.Name File Inf+"**************"); Console.WriteLine("File size: {0}", f.Length); Console.WriteLine("Creation: {0}", f.CreationTime); Console.WriteLine("Attributes: {0}", f.Attributes.ToString()); } } }

Эти два свойства также работают с сетевыми дисками! Поиск информации для конкретной папки Ниже приведен список сведений о папке об объекте «Папка». Дата создания, последнее изменение и дата последнего доступа. Копирование, стирание и перемещение Папка может быть скопирована, удалена или перемещена с использованием методов копирования, удаления и перемещения. Эта тема, однако, уже обсуждалась в части этого семинара, поэтому мы не будем вдаваться в это в этот момент.

Большинство папок - это «папки с файлами». Размер папки можно определить с помощью свойства Размер. Но предостережение: иногда возникает ошибка времени выполнения «70 - Доступ запрещен», когда запрашивается свойство «Размер». Поэтому всегда рекомендуется устанавливать обработку ошибок.

Замечание . Еще раз удалите с диска d измененную папку prim , затем скопирует ее исходную версию из раздела 12 данного электронного учебника.

Рассмотрим следующий пример:

static void Main() { FileInfo f = new FileInfo(@"d:\prim\letter\letter1.txt"); f.CopyTo(@"d:\prim\bmp\letter.txt"); Directory.CreateDirectory(@"d:\prim\archives"); f.MoveTo(@"d:\prim\archives\letter1.txt"); f = new FileInfo(@"d:\prim\letter\letter2.txt"); f.Delete(); }

Имя диска, имя папки, полный путь и т.д. Ь Найдите родительскую папку, которую вы хотите узнать, является ли папка корневой папкой или существует ли родительская папка? Примечание. Существуют ли другие подпапки? Количество файлов в каталоге может определяться файлами.

Системные каталоги и временные имена файлов. Временные имена файлов. Синтез имен файлов и каталогов. Следующие методы всегда ожидают строковые параметры, а также возвращают строку в результате. Параметр может быть либо каталогом, либо полным именем файла, вкл. И это именно то, что у нас было до этого!

Задание . Посмотрите, что произойдет, если запустить эту программу еще раз. Дайте этому объяснение.

Рассмотрим еще один пример по удалению файлов:

static void printFile(FileInfo file) { Console.WriteLine("***** "+file.Name+" *****"); Console.WriteLine("File size: {0}", file.Length); Console.WriteLine("Creation: {0}", file.CreationTime); Console.WriteLine("Attributes: {0}", file.Attributes.ToString()); } static void Main(string args) { DirectoryInfo dir = new DirectoryInfo(@"d:\prim\bmp"); FileInfo files = dir.GetFiles(); if (files.Length!=0) { Console.WriteLine("Найдено {0} файла", files.Length); foreach (FileInfo f in files) { printFile(f); f.Delete(); } Console.WriteLine("\nТеперь в каталоге содержится {0} файлов и можно его удалить", dir.GetFiles().Length); dir.Delete(); } }

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

Вот личные файлы и документы, а также личные файлы конфигурации. Здесь система хранит общие библиотеки программ всех видов. Файлы и исходные данные восстанавливаются после проверки жесткого диска - в файловой системе. Здесь бинарные файлы и их собственные библиотеки могут распространяться по своему усмотрению.

Класс File

Доступ к физическим файлам можно получать и через статические методы класса File . Большинство методов объекта Fileinfo представляют в этом смысле зеркальное отражение методов объекта File .

Замечание . В последний раз удалите с диска d измененную папку prim, затем скопирует ее исходную версию из раздела 12данного электронного учебника.

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

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

static void Main(string args) { File.Copy(@"d:\prim\letter\letter1.txt",@"d:\prim\bmp\letter1.txt"); Directory.CreateDirectory(@"d:\prim\archives"); File.Move(@"d:\prim\letter\letter1.txt",@"d:\prim\archives\letter1.txt"); File.Delete(@"d:\prim\letter\letter2.txt"); Directory.Delete(@"d:\prim\letter"); }

Имеет прямой смысл использовать статический класс File , когда требуется осуществить единственный вызов метода на объект. В этом случае вызов будет выполнен быстрее, поскольку.NET Framework не придется проходить через процедуру создания экземпляра нового объекта с последующим вызовом метода. Однако если приложение осуществляет несколько операций над файлом, то более разумным представляется создать экземпляр объекта FileInfo и использовать его методы. Это позволит сэкономить определенное время, поскольку объект будет заранее настроен на нужный файл в файловой системе, в то время как статическому классу придется каждый раз осуществлять его поиск заново.

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



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: