
- •11. Организация работы с файлами
- •11.1. Использование стандартных диалоговых окон открытия и сохранения файлов
- •11.2. Использование стандартного диалогового окна обзора папок
- •11.3. Использование класса System.Io.File для работы с файлами
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •11.4. Использование класса System.Io.Directory для работы с папками
- •If (Directory.Exists(currentDir)) // Если папка существует
- •If (Directory.Exists(sourceDir) & Directory.Exists(destDir) &
- •If (Directory.Exists(destDir)) // Если папка существует
- •11.5. Использование класса System.Io.Path для работы со строкой пути к папке или файлу
- •If (Path.HasExtension(path1))
- •If (!Path.HasExtension(path2))
- •If (!Path.IsPathRooted(path3))
- •11.6. Использование класса System.Io.FileInfo для работы с файлами
- •If (!fi1.Exists)
- •11.7. Использование класса System.Io.DirectoryInfo для работы с файлами и папками
- •If (cd.Exists) // Если заданная папка существует...
- •If (sd.Exists & dd.Exists & !md.Exists)
- •If (dd.Exists) // Если папка существует
- •11.8. Использование класса System.Io.DriveInfo для работы с дисками
- •11.9. Использование класса System.Io.FileStream для работы с файлами
- •If (fs.CanRead && fs.CanWrite)
- •11.10. Использование классов System.Io.StreamReader и System.Io.StreamWriter для работы с файлами
11.3. Использование класса System.Io.File для работы с файлами
(http://msdn.microsoft.com/ru-ru/library/system.io.file.aspx)
Таблица 11.5. Основные методы класса File из пространства имен System.IO
Имя |
Описание |
AppendAllLines(sf,s); AppendAllLines(sf,s,cd); |
Добавляет строки (s) в файл (sf), используя заданную кодировку (cd), а затем закрывает файл. Если файл не существует, он будет создан. Варианты кодировок представлены в таблице 11.6. |
AppendAllText(sf,s); AppendAllText(sf,s,cd); |
Открывает файл (sf), добавляет в него указанную строку (s), используя заданную кодировку (cd), а затем закрывает файл. Если файл не существует, он будет создан. Варианты кодировок представлены в таблице 11.6. |
AppendText(sf); |
Добавляет в существующий файл (sf, объект StreamWriter) текст в кодировке UTF-8. |
Copy(sf1,sf2); Copy(sf1,sf2,w); |
Копирует существующий файл (sf1) в новый файл (sf2) с возможностью перезаписи (w) или без нее. При возможной перезаписи аргумент w равен true, если конечный файл можно перезаписать, в противном случае – false. |
Create(sf); Create(sf,bf); Create(sf,bf,opt); |
Создает новый файл (sf, объект FileStream) для чтения и записи с заданными размером буфера (bf) и значением opt из перечисления System.IO.FileOptions (таблица 11.8), определяющим, как создавать или перезаписывать файл. При этом по умолчанию используются следующие значения перечислений (таблица 11.8): FileMode.Create, FileAccess.ReadWrite и FileShare.None . |
CreateText(sf); |
Создает или открывает файл (sf, объект StreamWriter) для записи текста в кодировке UTF-8. |
Delete(sf); |
Удаляет указанный файл (sf). Если указанный файл не существует, исключение не создается. |
Exists(sf); |
Определяет, существует ли заданный файл (sf). |
GetAttributes(sf); |
Получает атрибуты заданного файла (sf). Атрибуты задаются перечислением FileAttributes (таблица 11.7) |
GetCreationTime(sf); |
Возвращает дату и время создания заданного файла или каталога (sf). |
GetLastAccessTime(sf); |
Возвращает время и дату последнего обращения к указанному файлу или каталогу (sf). |
GetLastWriteTime(sf); |
Возвращает время и дату последней операции записи в указанный файл или каталог (sf). |
Move(sf1,sf2); |
Перемещает заданный файл (sf1) в новое место (sf2) и разрешает его переименование. |
Open(sf,md); Open(sf,md,access); Open(sf,md,access,shr); |
Открывает заданный файл (sf, объект FileStream). Другие аргументы метода определяют: md – режим доступа к файлу (константа из перечисле-ния FileMode, таблица 11.8); access – тип доступа к файлу (константа из перечисле-ния FileAccess, таблица 11.8); shr – тип разрешения доступа к файлу другим процес-сам (константа из перечисления FileShare, таблица 11.8). |
OpenRead(sf); |
Открывает для чтения существующий файл (sf, объект FileStream). При этом по умолчанию используются следующие значения перечислений (таблица 11.8): FileMode.Open , FileAccess.Read и FileShare.Read . |
OpenText(sf); |
Открывает для чтения существующий файл (sf, объект StreamWriter), содержащий текст в кодировке UTF-8. |
OpenWrite(sf); |
Открывает для записи существующий файл (sf, объект FileStream). При этом по умолчанию используются следующие значения перечислений (таблица 11.8): FileMode.OpenOrCreate , FileAccess.Write и FileShare.None . |
ReadAllBytes(sf); |
Открывает двоичный файл (sf), считывает содержимое файла в массив байтов, а затем закрывает файл. |
ReadAllLines(sf); ReadAllLines(sf,cd); |
Открывает текстовый файл (sf), считывает все строки файла с заданной кодировкой (cd) в массив строк, а затем закрывает файл. Варианты кодировок представлены в таблице 11.6. |
ReadAllText(sf); ReadAllText(sf,cd); |
Открывает текстовый файл (sf), считывает все строки файла с заданной кодировкой (cd) в строку, а затем закрывает файл. Варианты кодировок представлены в таблице 11.6. |
ReadLines(sf); ReadLines(sf,cd); |
Считывает строки текстового файла (sf) с заданной кодировкой (cd) в коллекцию строк. |
Replace(sf1,sf2,sf3); |
Заменяет содержимым одного файла (sf1) содержимое другого файла (sf2), удаляя исходный файл (sf2) и создавая резервную копию (sf3) замененного файла. |
SetAttributes(sf,attr); |
Устанавливает атрибуты (attr), задаваемые побитовым сочетанием значений перечисления FileAttributes (таблица 11.7), для указанного файла (sf). |
SetCreationTime(sf,dt); |
Устанавливает дату и время (dt) создания заданного файла (sf). |
SetLastAccessTime(sf,dt); |
Устанавливаются дата и время (dt) последнего доступа к заданному файлу (sf). |
SetLastWriteTime(sf,dt); |
Устанавливаются дата и время (dt) последней операции записи в заданный файл (sf). |
WriteAllBytes(sf,arB); |
Создает новый файл (sf), записывает в него указанный массив байтов (arB), а затем закрывает файл. Если такой файл уже существует, он будет перезаписан. |
WriteAllLines(sf,arS); WriteAllLines(sf,arS,cd); WriteAllLines(sf,cols); WriteAllLines(sf,cols,cd); |
Создает новый файл (sf), записывает в него указанный массив (arS) или коллекцию (cols) строк в заданной кодировке (cd), а затем закрывает файл. Если такой файл уже существует, он будет перезаписан. Варианты кодировок представлены в таблице 11.6. |
WriteAllText(sf,s); WriteAllText(sf,s,cd); |
Создает новый файл (sf), записывает в него строку (s) в заданной кодировке (cd), а затем закрывает файл. Если такой файл уже существует, он будет перезаписан. Варианты кодировок представлены в таблице 11.6. |
Таблица 11.6. Кодировки, поддерживаемые платформой .NET Framework (свойства класса System.Text.Encoding)
Имя |
Описание |
ASCII |
Получает кодировку для набора символов ASCII (7-разрядных). |
BigEndianUnicode |
Получает кодировку для формата UTF-16 с обратным порядком байтов. |
Default |
Получает кодировку для текущей кодовой страницы ANSI операционной системы. |
Unicode |
Получает кодировку для формата UTF-16 с прямым порядком байтов. |
UTF32 |
Получает кодировку для формата UTF-32 с прямым порядком байтов. |
UTF7 |
Получает кодировку для формата UTF-7. |
UTF8 |
Получает кодировку для формата UTF-8 (используется по умолчанию). |
Таблица 11.7. Значения (типа Long) перечисления FlagsAttribute класса System.IO, используемые для задания атрибутов файлов и каталогов
Значение |
Описание |
ReadOnly |
Файл доступен только для чтения. |
Hidden |
Файл скрытый и поэтому не включается в обычный список каталога. |
System |
Файл является системным. Этот файл является частью операционной системы или используется исключительно операционной системой. |
Directory |
Файл представляет собой каталог. |
Archive |
Файл является архивным. Приложения используют этот атрибут, чтобы пометить файлы для резервного копирования или удаления. |
Device |
Зарезервировано для использования в будущем. |
Normal |
Файл обычный, и другие атрибуты не установлены. Этот атрибут действителен, только если используется отдельно. |
Temporary |
Файл является временным. Файловая система для ускорения доступа будет пытаться держать все данные в памяти, а не сбрасывать их назад в массовую память. Приложение должно стереть временный файл сразу после того, как он станет ненужным. |
SparseFile |
Файл представляет собой разреженный файл. Разреженными файлами обычно являются большие файлы, в которых в основном нулевые данные. |
ReparsePoint |
Файл содержит точку повторной обработки, блокирующую определяемые пользователем данные, связанные с файлом или каталогом. |
Compressed |
Файл является сжатым. |
Offline |
Файл находится в автономном режиме. Данные этого файла недоступны непосредственно. |
NotContentIndexed |
Файл не будет индексироваться службой индексирования содержимого операционной системы. |
Encrypted |
Зашифрованный файл или каталог. Для файла это означает, что все данные в файле зашифрованы, а для каталога – что шифрование производится по умолчанию для вновь создаваемых файлов и каталогов. |
Таблица 11.8. Значения перечислений FileMode, FileAccess, FileShare, FileOptions из пространства имен System.IO, используемые различными классами для настройки поведения файлов при их создании и открытии
Значение |
Описание |
FileMode |
|
CreateNew |
Создание нового файла. Если файл уже существует, фиксируется ошибка. Для создания файла требуется разрешение доступа к нему для записи. |
Create |
Создание нового файла. Если файл уже существует, он будет переписан. Если же файл уже существует, но является скрытым, фиксируется ошибка. Для создания файла требуется разрешение доступак нему для записи. |
Open |
Открытие существующего файла. Если файл не существует, фиксируется ошибка. Возможность открытия файла зависит от значения, задаваемого перечислением FileAccess. |
OpenOrCreate |
Открытие файла, если он существует, в противном случае – создание нового файла. Для открытия или создания файла требуется разрешение соответствующего доступа к нему. |
Truncate |
Открытие существующего файла с усечением его размера до нуля байтов. Попытка выполнить чтение из файла вызывает ошибку. Для открытия файла требуется разрешение доступа к нему для записи. |
Append |
Открытие файла для его дополнения, если он существует, либо создание нового файла. Попытка поиска положения перед концом файла или попытка чтения из файла вызывает ошибку. Значение FileMode.Append можно использовать только вместе с FileAccess.Write. |
FileAccess |
Это перечисление имеет атрибут FlagsAttribute, поддерживающий побитовое соединение составляющих его значений. |
Read |
Доступ только для чтения файла. |
Write |
Доступ только для записи в файл. |
ReadWrite |
Доступ для чтения и записи файла. |
FileShare |
Это перечисление имеет атрибут FlagsAttribute, поддерживающий побитовое соединение составляющих его значений. |
None |
Запрещает совместное использование текущего файла. Любой запрос на открытие файла не выполняется до тех пор, пока файл не будет закрыт. |
Read |
Разрешает последующее открытие файла для чтения. Однако даже при этом для доступа к файлу могут потребоваться дополнительные разрешения. |
Write |
Разрешает последующее открытие файла для записи. Однако даже при этом для доступа к файлу могут потребоваться дополнительные разрешения. |
ReadWrite |
Разрешает последующее открытие файла для чтения или записи. Однако даже при этом для доступа к файлу могут потребоваться дополнительные разрешения. |
Delete |
Разрешает последующее удаление файла. |
FileOptions |
Это перечисление имеет атрибут FlagsAttribute, поддерживающий побитовое соединение составляющих его значений. |
None |
Указывает, что при создании объекта FileStream не должны использоваться дополнительные параметры. |
WriteThrough |
Указывает, что запись в системе должна выполняться через любой промежуточный кэш и проходить напрямую на диск. |
Asynchronous |
Указывает, что файл может использоваться для асинхронного чтения и записи. |
RandomAccess |
Указывается, что доступ к файлу осуществляется произвольно. |
DeleteOnClose |
Указывает, что файл автоматически удаляется после использования. |
SequentialScan |
Указывает, что доступ к файлу осуществляется последовательно от начала к концу. |
Encrypted |
Указывает, что файл является зашифрованным и может быть расшифрован только с использованием той же учетной записи пользователя, которая применялась для шифрования. |
Пример 11.4. Использование методов Exists, CreateText, AppendText, OpenText, Copy, Delete класса File для создания и открытия текстового файла, записи в него, затем – для добавления в него, далее – для чтения из него, и, наконец, копирования и удаления файла.
using System;
using System.IO;
class TestFileText
{ public static void Main()
{ string path = @"c:\temp\Test.txt";
string line = "Test";
// Создание файла для записи, если он не существовал.