Открыть файл для записи с#. Работа с потоками и файловой системой

Для работы с каталогами в пространстве имен System.IO предназначены сразу два класса: Directory и DirectoryInfo .

Класс Directory

Класс Directory предоставляет ряд статических методов для управления каталогами. Некоторые из этих методов:

    CreateDirectory(path) : создает каталог по указанному пути path

    Delete(path) : удаляет каталог по указанному пути path

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

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

    Exists(path) : определяет, существует ли каталог по указанному пути path. Если существует, возвращается true , если не существует, то false

    GetDirectories(path) : получает список каталогов в каталоге path

    GetFiles(path) : получает список файлов в каталоге path

    Move(sourceDirName, destDirName) : перемещает каталог

    GetParent(path) : получение родительского каталога

Класс DirectoryInfo

Данный класс предоставляет функциональность для создания, удаления, перемещения и других операций с каталогами. Во многом он похож на Directory. Некоторые из его свойств и методов:

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

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

    Create() : создает каталог

    CreateSubdirectory(path) : создает подкаталог по указанному пути path

    Delete() : удаляет каталог

    Свойство Exists : определяет, существует ли каталог

    GetDirectories() : получает список каталогов

    GetFiles() : получает список файлов

    MoveTo(destDirName) : перемещает каталог

    Свойство Parent : получение родительского каталога

    Свойство Root : получение корневого каталога

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

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

Посмотрим на примерах применение этих классов

Получение списка файлов и подкаталогов

string dirName = "C:\\"; if (Directory.Exists(dirName)) { Console.WriteLine("Подкаталоги:"); string dirs = Directory.GetDirectories(dirName); foreach (string s in dirs) { Console.WriteLine(s); } Console.WriteLine(); Console.WriteLine("Файлы:"); string files = Directory.GetFiles(dirName); foreach (string s in files) { Console.WriteLine(s); } }

Обратите внимание на использование слешей в именах файлов. Либо мы используем двойной слеш: "C:\\" , либо ординарный, но тогда перед всем путем ставим знак @: @"C:\Program Files"

Абсолютный режим использует так называемые двоичные маски. И вы можете отдельно указывать разрешения для каждой категории пользователей с помощью символического метода, а также вы также можете указывать все разрешения для всех категорий пользователей одновременно с использованием двоичных масок. Преимущество двоичных масок и «способность» изменять все разрешения с использованием только одной команды, недостатка и «менее простого» использования.

Фактически, в символическом методе используются символы, которые очень легко запомнить. В двоичной маске три категории пользователей, т.е. три символьных токена, становятся 3-мя цифрами в восьмеричном формате в том смысле, что каждая категория «представлена ​​числом в базе каждого восьмеричного числа» и эквивалентна число из трех двоичных цифр. Таблицу выше, восьмеричная цифра 0 соответствует двоичному числу 000, а восьмеричная цифра 4 соответствует двоичной цифре, поэтому рассмотрите каждое из этих трех двоичных чисел как переключатель, то есть переключатель, который можно включить или выключить, мы можем включить или отключить разрешение.

Создание каталога

string path = @"C:\SomeDir"; string subpath = @"program\avalon"; DirectoryInfo dirInfo = new DirectoryInfo(path); if (!dirInfo.Exists) { dirInfo.Create(); } dirInfo.CreateSubdirectory(subpath);

Вначале проверяем, а нету ли такой директории, так как если она существует, то ее создать будет нельзя, и приложение выбросит ошибку. В итоге у нас получится следующий путь: "C:\SomeDir\program\avalon"

Получение информации о каталоге

string dirName = "C:\\Program Files"; DirectoryInfo dirInfo = new DirectoryInfo(dirName); Console.WriteLine("Название каталога: {0}", dirInfo.Name); Console.WriteLine("Полное название каталога: {0}", dirInfo.FullName); Console.WriteLine("Время создания каталога: {0}", dirInfo.CreationTime); Console.WriteLine("Корневой каталог: {0}", dirInfo.Root);

Удаление каталога

Если мы просто применим метод Delete к непустой папке, в которой есть какие-нибудь файлы или подкаталоги, то приложение нам выбросит ошибку. Поэтому нам надо передать в метод Delete дополнительный параметр булевого типа, который укажет, что папку надо удалять со всем содержимым:

Первое число соответствует разрешению на чтение, второе - разрешению на запись, третье - разрешению на выполнение. Нулевое число соответствует отключению, то есть отключенному разрешению. Таким образом, «000 отключает все разрешения, в то время как 111 в противном случае разрешает им все». Переведенный на восьмеричные средства 0 отключает все разрешения, а 7 разрешает их все, 4 - только чтение, 1 - только выполнение и т.д. соответствие с символами, указанными ранее. На этом этапе ясно, что 3 токена, соответствующие трем категориям пользователей, достаточны для 3-х восьмеричных цифр.

String dirName = @"C:\SomeFolder"; try { DirectoryInfo dirInfo = new DirectoryInfo(dirName); dirInfo.Delete(true); } catch (Exception ex) { Console.WriteLine(ex.Message); }

String dirName = @"C:\SomeFolder"; Directory.Delete(dirName, true);

Перемещение каталога

string oldPath = @"C:\SomeFolder"; string newPath = @"C:\SomeDir"; DirectoryInfo dirInfo = new DirectoryInfo(oldPath); if (dirInfo.Exists && Directory.Exists(newPath) == false) { dirInfo.MoveTo(newPath); }

При перемещении надо учитывать, что новый каталог, в который мы хотим перемесить все содержимое старого каталога, не должен существовать.

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

Октальная цифра 4 позволяет разрешить разрешение на чтение, разрешение на запись 2-го разряда и запуск разрешенного числа 1. Ну, на этом этапе, чтобы получить все возможные комбинации разрешений и достаточно, чтобы суммировать эти 3 восьмеричные цифры. Например, чтобы включить чтение и запись, вам нужно добавить 4 и 2, чтобы получить 6. Включить чтение и выполнение и достаточно добавить 4 к 1, чтобы получить 5.

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

Фреймворк.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(); } } }

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



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

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

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