Пространство имен System.IO
Пространство имен System.IO в .NET — это область библиотек базовых классов, посвященная службам файлового ввода-вывода, а также ввода-вывода из памяти. Подобно любому пространству имен, в System.IO определен набор классов, интерфейсов, перечислений, структур и делегатов, большинство из которых находятся в mscorlib.dll. В дополнение к типам, содержащимся внутри mscorlib.dll, в сборке System.dll определены дополнительные члены пространства имен System.IO. Обратите внимание, что все проекты Visual Studio 2010 автоматически устанавливают ссылки на обе сборки.
Многие типы из пространства имен System.IO сосредоточены на программных манипуляциях физическими каталогами и файлами. Дополнительные типы предоставляют поддержку чтения и записи данных в строковые буферы, а также области памяти. Ниже кратко описаны основные (неабстрактные) классы, которые дают понятие о функциональности System.IO:
BinaryReader, BinaryWriter
Эти классы позволяют сохранять и извлекать элементарные типы данных (целочисленные, булевские, строковые и т.п.) в двоичном виде
BufferedStream
Этот класс предоставляет временное хранилище для потока байтов, которые могут затем быть перенесены в постоянные хранилища
Directory, DirectoryInfo
Эти классы используются для манипуляций структурой каталогов машины. Тип Directory представляет функциональность, используя статические члены. Тип DirectoryInfo обеспечивает аналогичную функциональность через действительную объектную ссылку
DriveInfo
Этот класс предоставляет детальную информацию относительно дисковых устройств, используемых данной машиной
File, FileInfo
Эти классы служат для манипуляций множеством файлов данной машины. Тип File представляет функциональность через статические члены. Тип FileInfo обеспечивает аналогичную функциональность через действительную объектную ссылку
FileStream
Этот класс обеспечивает произвольный доступ к файлу (т.е. возможности поиска) с данными, представленными в виде потока байт
FileSystemWatcher
Этот класс позволяет отслеживать модификации внешних файлов в определенном каталоге
MemoryStream
Этот класс обеспечивает произвольный доступ к данным, хранящимся в памяти, а не в физическом файле
Path
Этот класс выполняет операции над типами System.String, содержащими информацию о пути к файлу или каталогу в независимой от платформы манере
StreamWriter, StreamReader
Эти классы используются для хранения (и извлечения) текстовой информации из файла. Эти классы не поддерживают произвольного доступа к файлу
StringWriter, StringReader
Подобно классам StreamWriter/StreamReader, эти классы также работают с текстовой информацией. Однако лежащим в основе хранилищем является строковый буфер, а не физический файл
В дополнение к этим конкретным типам классов в System.IO определено несколько перечислений, а также набор абстрактных классов (т.е. Stream, TextReader и TextWriter), которые определяют разделяемый полиморфный интерфейс для всех наследников.
Как не трудно было заметить в приведенном выше списке, для представления файлов и папок используются по два класса. Какой из них применять — во многом зависит от того, сколько раз требуется получить доступ к данной папке или файлу.
Классы Directory и File содержат только статические методы, а их экземпляры никогда не создаются. Для их использования нужно просто предоставить путь к интересующему объекту файловой системы при каждом вызове метода-члена. Если требуется выполнить только одну операцию в отношении папки или файла, то применение этих классов является наиболее эффективным подходом, поскольку позволяет избегать накладных расходов, связанных с созданием экземпляров.
Классы DirectoryInfo и FileInfo реализуют практически те же общедоступные методы, что и Directory и File, а также некоторые общедоступные свойства и конструкторы, но поддерживают состояние, а их члены не являются статическими.
Обратите внимание на рисунке, что классы Directory и File непосредственно расширяют System.Object, в то время как DirectoryInfo и FileInfo наследуются от абстрактного класса FileSystemInfo:

Классы DirectoryInfo и FileInfo унаследовали значительную часть своего поведения от абстрактного базового класса FileSystemInfo. По большей части члены класса FileSystemInfo используются для получения общих характеристик (таких как время создания, различные атрибуты и т.д.) определенного файла или каталога. В таблице ниже перечислены некоторые основные свойства, представляющие интерес:
| Свойство | Назначение |
| Attributes | Получает или устанавливает ассоциированные с текущим файлом атрибуты, которые представлены перечислением FileAttributes (доступный только для чтения, зашифрованный, скрытый или сжатый) |
| CreationTime | Получает или устанавливает время создания текущего файла или каталога |
| Exists | Может использоваться для определения, существует ли данный файл или каталог |
| Extension | Извлекает расширение файла |
| FullName | Получает полный путь к файлу или каталогу |
| LastAccessTime | Получает или устанавливает время последнего доступа к текущему файлу или каталогу |
| LastWriteTime | Получает или устанавливает время последней записи в текущий файл или каталог |
| Name | Получает имя текущего файла или каталога |
В классе FileSystemInfo также определен метод Delete(). Этот метод реализуется производными типами для удаления файла или каталога с жесткого диска. Кроме того, метод Refresh() может быть вызван перед получением информации об атрибутах, чтобы обеспечить актуальность состояния статистики о текущем файле или каталоге.
Обработка файлов в С#. NET

1661

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


В System.IO содержится класс DriveInfo, чтобы руководить системой диска во время произведения разных операций. Класс DriveInfo предоставляет детальную и полную информацию про количество дисков, общее пространство на жёстком диске, свободное пространство, название диска, состояние готовности и другое. Обратите внимание на следующую программу, которая показывает основные дисководы:
DriveInfo[] di = DriveInfo.GetDrives();
Console.WriteLine( "Total Partitions" );
foreach(DriveInfo items in di)
Следующие фрагменты кода отдельно выполняют все другие операции класса DriveInfo.
static void Main(string[] args)
DriveInfo[] di = DriveInfo.GetDrives();
Console.WriteLine( "Total Partitions" );
foreach(DriveInfo items in di)
Console.Write( "\nEnter the Partition::" );
string ch = Console.ReadLine();
DriveInfo dInfo = new DriveInfo(ch);
Console.WriteLine( "Drive Name::<0>" , dInfo.Name);
Console.WriteLine( "Total Space::<0>" , dInfo.TotalSize);
Console.WriteLine( "Free Space::<0>" , dInfo.TotalFreeSpace);
Console.WriteLine( "Drive Format::<0>" , dInfo.DriveFormat);
Console.WriteLine( "Volume Label::<0>" , dInfo.VolumeLabel);
Console.WriteLine( "Drive Type::<0>" , dInfo.DriveType);
Console.WriteLine( "Root dir::<0>" , dInfo.RootDirectory);
Console.WriteLine( "Ready::<0>" , dInfo.IsReady);
Тема связана со специальностями:
После разработки этой программы, она отображает каждую деталь дисковода и конкретные дисководы, как показано ниже:

Работа с каталогами
Чтобы производить операции с каталогами, то есть создавать и удалять данные, шаблон .NET содержит два элементарных класса: DirectoryInfo и Directory.
Классовый тип DirectoryInfо
Класс DirectoryInfo содержит серию методов создания, удаления, перемещения и перечень каталогов и подкаталогов. В следующем кодовом примере отображена информация относительно временного каталога.
DirectoryInfo di = new DirectoryInfo(@ "D:\temp" );
Console.WriteLine( "*******Direcotry Informations*******\n\n" );
Console.WriteLine( "Full Name=<0>" , di.FullName);
Console.WriteLine( "Root=<0>" , di.Root);
Console.WriteLine( "Attributes=<0>" , di.Attributes);
Console.WriteLine( "Creation Time=<0>" , di.CreationTime);
Console.WriteLine( "Name=<0>" , di.Name);
Console.WriteLine( "Parent=<0>" , di.Parent);
Кодовый пример производит информацию относительно временного каталога, который содержится на диске D:

Допускается, что путь, пройденный конструктором времени класса DirectoryInfo существует. Но если Вы попробуете работать с несуществующим каталогом, то общая среда выполнения языков CLR исключит это действие. Чтобы создать каталог, сначала проверьте, нет ли таких исключений.
DirectoryInfo di = new DirectoryInfo(@ "D:\temp\xyz" );
При помощи программ и при использовании метода CreateSubdirectory можно также увеличить структуру каталога. В следующем кодовом примере показано, как создается каталог на диске D, а потом в D:\ajay\:
DirectoryInfo di = new DirectoryInfo(@ "D:\");
Класс каталога
Класс каталога выполняет почти те же функции, что и класс DirectoryInfo. Класс каталога, как правило, возвращает строчные данные, а не типизированые объекты класса DirectoryInfo. В следующем примере показано, как удалять каталог и подкаталог на диске D.
static void Main(string[] args)
DirectoryInfo di = new DirectoryInfo(@ "d:\abc" );
Console.WriteLine( "Name:<0>" , di.FullName);
Console.Write( "Are you sure to Delete:" );
string str = Console.ReadLine();
Directory.Delete(@ "d:\abc" , true );
Считывание и введение информации в файл
Операции считывания и введения информации происходят при использовании файлового объекта. Следующий фрагмент кода считывает текстовый файл, размещенный в компьютере.
private void button1_Click(object sender, EventArgs e)
MessageBox.Show( "File not Found. " );
Сначала пользователя спрашивают, правда ли он желает действовать в выбранном им направлении. Позже, когда настанет очередь файла, метод ReadAllText считывает всю текстовую информацию с файла и отображает ее за текстовым полем.
Кроме того, используя класс File, к файлу, с которого считывается информация, можно добавить что-то свое, кроме самого текста, как показано ниже.
Видео курсы по схожей тематике:

Unit тестирование в C#

Автоматизация тестирования на С#

Платформа Managed Extensibility Framework (MEF)
File.WriteAllText(@ "d:\test.txt" , textBox2.Text);
Этот класс выбирает такой путь, что сохранит файл и способ введения данных как, например, текстовое поле или другой способ.
На следующих изображениях показан процесс считывания текстового файла после того, как был выбран соответствующий шаг:

Поток
Файловый поток
Класс файлового потока может считывать или вводить только один байт или же массив байта. Вам нужно будет раскодировать классовый тип System.String соответствующим массивом байта. Область System.Text определяет закодированый тип, чтобы потом выбрать метод закодирования или раскодирования текстового фрагмента в массив байта. Но закодированый массив байта сохраняется в файле способом FileStream.Write. Чтобы возвратить байт назад на накопитель, нужно вернуться на начальное место и использовать метод ReadByte. Затем Вам следует отобразить строчный массив байта и закодированый текстовый фрагмент на компьютере.
using (FileStream fs = new FileStream(@ "d:\ajay123.doc" , FileMode.Create))
string msg = "first program" ;
byte[] byteArray = Encoding.Default.GetBytes(msg);
fs.Write(byteArray, 0, byteArray.Length);
byte[] rFile = new byte[byteArray.Length];
for ( int i = 0; i < byteArray.Length; i++)
Двойное считывание и двойное введение информации
В следующих примерах показано, как вводится определенная информация к новому файлу champu.dat, используя BinaryWriter. Далее информация считывается в то время, как классовый тип BinaryReader применяет целый ряд способов.
static void Main(string[] args)
FileInfo fi = new FileInfo( "champu.dat" );
using (BinaryWriter bw = new BinaryWriter(fi.OpenWrite()))
string str = "hello champu ,one day you will become doomkatu" ;
FileInfo f = new FileInfo( "champu.dat" );
using (BinaryReader br = new BinaryReader(fi.OpenRead()))
Строчное считывание и введение данных
Можно использовать StringWriter и StringReader, чтобы поставлять текстовую информацию на поток запоминающего устройства. Вы в этом убедитесь, когда добавите информацию в виде символов к указаному буферу. На следующих кодовых примерах изображено, что лучше вводить блок строчных данных в StringWriter, чем в файл, размещенный на жестком диске.
.NET Framework
System.IO
Обратите внимание, что эта StreamReader конструктора StreamReader делает некоторое обнаружение автоматического кодирования , которое может или не может соответствовать фактической кодировке, используемой в файле.
Обратите внимание, что есть некоторые удобные методы, которые читают весь текст из файла, доступного в классе System.IO.File , а именно File.ReadAllText(path) и File.ReadAllLines(path) .
Чтение / запись данных с использованием System.IO.File
Сначала давайте посмотрим три разных способа извлечения данных из файла.
- В первой строке мы считываем все данные в файле в виде строки.
- Во второй строке мы считываем данные в файле в массив строк. Каждая строка в файле становится элементом в массиве.
- На третьем мы читаем байты из файла.
Затем давайте посмотрим три разных метода добавления данных в файл. Если указанный вами файл не существует, каждый метод автоматически создаст файл, прежде чем пытаться добавить к нему данные.
- В первой строке мы просто добавляем строку в конец указанного файла.
- Во второй строке мы добавляем каждый элемент массива в новую строку в файле.
- Наконец, в третьей строке мы используем File.AppendText чтобы открыть потоковый блок, который добавит все данные, которые будут записаны на него.
И, наконец, давайте посмотрим три разных способа записи данных в файл. Разница между добавлением и записью заключается в том, что запись поверх записи данных в файл при добавлении добавляет данные в файл. Если указанный вами файл не существует, каждый метод автоматически создаст файл, прежде чем пытаться записать данные на него.
- Первая строка записывает строку в файл.
- Вторая строка записывает каждую строку в массив в своей собственной строке в файле.
- Третья строка позволяет вам написать массив байтов в файл.
Последовательные порты, использующие System.IO.SerialPorts
Итерация по подключенным последовательным портам
Создание объекта System.IO.SerialPort
ПРИМЕЧАНИЕ . Это всего лишь три из семи перегрузок конструктора для типа SerialPort.
Чтение / запись данных через SerialPort
Самый простой способ — использовать методы SerialPort.Read и SerialPort.Write . Однако вы также можете получить объект System.IO.Stream который можно использовать для потоковой передачи данных через SerialPort. Для этого используйте SerialPort.BaseStream .
чтение
Вы также можете прочитать все доступные данные:
Или просто прочитайте первую новую строку, встречающуюся во входящих данных:
C# System.IO Classes: An Overview of the System.IO Namespace
In this article, we will delve into System.IO namespace in C# and understand the classes it provides to perform various input and output operations in a C# program. This article will cover all the essential topics of System.IO namespace, including the classes, methods, and properties, along with code examples to illustrate their use.
This article aims to provide a comprehensive understanding of System.IO namespace and help you in your journey of mastering C# programming.

system.io namespace
I. System.IO Namespace:
The System.IO namespace is part of the .NET framework and provides various classes to perform input and output operations in a C# program. This namespace contains classes for reading and writing to files, manipulating directories and files, working with streams, and more. System.IO namespace is essential for most C# programs that require file and directory operations.
II. File and Directory Operations:
File and directory operations are critical components of many C# applications. The System.IO namespace provides several classes for performing file and directory operations, including the following:
- File Class: This class provides methods for creating, copying, deleting, moving, and opening files.
- Directory Class: This class provides methods for creating, deleting, and enumerating directories.
- FileInfo Class: This class provides methods for manipulating files, such as copying and moving files.
- DirectoryInfo Class: This class provides methods for manipulating directories, such as creating and deleting directories.
Example code for performing file operations:
III. Streams:
Streams are a fundamental concept in C# for performing input and output operations. The System.IO namespace provides several stream classes for reading and writing data. The most commonly used stream classes are:
- MemoryStream: This class provides a stream for reading and writing to memory.
- FileStream: This class provides a stream for reading from and writing to files.
- NetworkStream: This class provides a stream for reading from and writing to network connections.
- BufferedStream: This class provides a stream for reading from and writing to a buffered stream.
Example:
Example code for reading from a stream:
To read more about stream, please refer to this article: StreamReader and StreamWriter in C# with examples
IV. File I/O Exceptions:
It is essential to handle exceptions that may occur when performing file and directory operations. The System.IO namespace provides several exceptions that can be thrown, including:
- FileNotFoundException: This exception is thrown when a file cannot be found.
- DirectoryNotFoundException: This exception is thrown when a directory cannot be found.
- IOException: This exception is thrown when an I/O error occurs.
Example code for handling file I/O exceptions:
V. Text I/O:
Text I/O is a common operation in C#, and the System.IO namespace provides several classes for performing text I/O, including:
- StreamReader: This class provides methods for reading text from a stream.
- StreamWriter: This class provides methods for writing text to a stream.
- StringReader: This class provides methods for reading text from a string.
- StringWriter: This class provides methods for writing text to a string.
Example code for reading and writing text in C#:
VI. Binary I/O:
Binary I/O is an essential operation in C#, and the System.IO namespace provides several classes for performing binary I/O, including:
- BinaryReader: This class provides methods for reading binary data from a stream.
- BinaryWriter: This class provides methods for writing binary data to a stream.
The following is the sample code example for reading and writing binary data:
| Class | Description |
|---|---|
| File: | Provides static methods for the creation, copying, deletion, moving, and opening of a single file. |
| FileInfo: | Represents a file and provides instance methods for the creation, copying, deletion, moving, and opening of a single file. |
| Directory: | Provides static methods for creating, deleting, and enumerating directories. |
| DirectoryInfo: | Represents a directory and provides instance methods for creating, deleting, and enumerating directories. |
| Path: | Provides methods for processing directory and file path strings. |
| FileStream: | Represents a stream for reading from and writing to a file. |
| StreamReader: | This represents a reader that can read a sequence of characters from a file or a stream. |
| StreamWriter: | Represents a writer that can write a sequence of characters to a file or a stream. |
| BinaryWriter: | Represents a writer that can write primitive data types in binary to a stream. |
These classes provide a comprehensive set of tools for performing I/O operations and allow you to easily read and write text and binary data, perform file and directory operations, and handle exceptions that may occur during I/O operations. Whether a beginner or an experienced developer, these classes provide the necessary functionality to work with files and directories in C#.
Example:
This code demonstrates how to use the File class to create a file, the Directory class to create a directory, the StreamReader class to read text data from a file, and the BinaryWriter class to write binary data to a file. The code also shows how to use the using statement to automatically close the file and release any associated resources when you’re done with them.

System.IO delegates in C#
- FileSystemEventHandler: Represents the method that will handle a change in the file system, such as the creation, deletion, or modification of a file or directory.
- RenamedEventHandler: Represents the method that will handle the renaming of a file or directory.
- ErrorEventHandler: This represents the method that will handle errors during file system operations.
- WaitForChangedResult: Represents the result of a file system change wait operation.
- FileSystemWatcher: Monitors the file system for changes and raises events when a file or directory is created, deleted, modified, or renamed.
- Directory: Provides static methods for creating, deleting, and enumerating directories.
- DirectoryInfo: Represents a directory and provides instance methods for creating, deleting, and enumerating directories.
These delegates provide a way to handle file system events and monitor changes in the file system, which can be helpful in applications that need to keep track of changes to the files and directories. Additionally, the Directory and DirectoryInfo classes provide methods for working with directories, making it easier to manage the file system in C#.
Q: What is the System.IO namespace in C#?
The System.IO namespace in C# provides a comprehensive set of classes for performing I/O operations, including file and directory operations, text and binary I/O, and exception handling.
Q: What are some of the key System.IO classes in C#?
Some important System.IO classes in C# are: FileInfo , Directory , DirectoryInfo , Path , FileStream , StreamReader , StreamWriter , BinaryReader , and BinaryWriter classes.
Q: Why do you use the File class in C#?
The File class in C# provides static methods for performing operations on a single file, such as creating, copying, deleting, moving, and opening a file.
Q: How do you read and write text data in C# using the StreamReader and StreamWriter classes?
The StreamReader and StreamWriter classes in C# provide methods for reading and writing text data to and from a file or a stream.
To read text data using the StreamReader class, you would create a StreamReader object and call its ReadLine method to read each lines of the file.
To write text data using the StreamWriter class, you would create a StreamWriter object and call its WriteLine method to write each line of text to the file.
You might also like:
Please share this post and let us know what you think in the comments.