Файловая система c#. Работа с потоками и файловой системой

Класс 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()); } } }

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

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

Замечание . Еще раз удалите с диска 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 и использовать его методы. Это позволит сэкономить определенное время, поскольку объект будет заранее настроен на нужный файл в файловой системе, в то время как статическому классу придется каждый раз осуществлять его поиск заново.

Централизованные системы контроля версий

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

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

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

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

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

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

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

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

    Системы управления распределенной версией

    Это - то, где входят распределенные системы контроля версий. Таким образом, если сервер умирает, и эти системы сотрудничают с ним, любой из клиентских репозиториев может быть скопирован на сервер для его восстановления. Каждый раз, когда загружается моментальный снимок, выполняется полная резервная копия всех данных.

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

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

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

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

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

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

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

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

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

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

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

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(); } } }

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

Цель в домашнем каталоге пользователя

Цель в каталоге документов пользователя

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



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

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

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