English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Класс FileInfo предоставляет такие же функции, как и статический класс File, но вы можете получить больше контроля над операциями чтения/записи файлов, написав код для чтения или записи байтов из файла вручную.
Атрибуты | Способ использования |
---|---|
Directory | Получает экземпляр родительского каталога. |
DirectoryName | Получает строку, представляющую полный путь к каталогу. |
Exists | Получает значение, указывающее, существует ли файл. |
Extension | Получает строку, представляющую расширение файла. |
FullName | Получает полный путь к 目录у или файлу. |
IsReadOnly | Получает или устанавливает значение, определяющее, является ли текущий файл только для чтения. |
LastAccessTime | Получает или устанавливает время последнего доступа к текущему файлу или каталогу. |
LastWriteTime | Получает или устанавливает время последней записи в текущий файл или каталог. |
Length | Получает размер текущего файла в байтах. |
Name | Получает имя файла. |
Метод | Способ использования |
---|---|
AppendText | Создает StreamWriter для добавления текста в файл, представляющий этот экземпляр FileInfo. |
CopyTo | Копирует существующий файл в новый файл, не позволяя перезаписывать существующий файл. |
Create | Создает файл. |
CreateText | Создает StreamWriter для записи в новый текстовый файл. |
Decrypt | Расшифровывает файл, зашифрованный текущим аккаунтом, с помощью метода Encrypt. |
Delete | Удаляет указанный файл. |
Encrypt | Шифрует файл, чтобы только учетная запись, используемая для шифрования файла, могла расшифровать его. |
GetAccessControl | Получает объект FileSecurity, который封装ляет элементы доступа к списку контроля доступа (ACL) для указанного файла. |
MoveTo | Перемещает указанный файл в новое положение и предоставляет возможность указать имя нового файла. |
Open | Открывает файл в указанном FileMode. |
OpenRead | Создает файловый поток только для чтения. |
OpenText | Создает StreamReader с кодировкой UTF8, который может читать из существующего текстового файла. |
OpenWrite | Создает файловый поток только для записи. |
Replace | Заменяет содержимое указанного файла файлом, описанным текущим объектом FileInfo, удаляет исходный файл и создает резервную копию замененного файла. |
ToString | Возвращает путь в виде строки. |
Ниже приведен пример того, как можно вручную читать байты из файла, а затем преобразовать их в строку с помощью кодировки UTF8:
Пример: Чтение файла с помощью класса FileInfo
//Создать FileInfo объект для указанного пути FileInfo fi = new FileInfo(@"D:\DummyFile.txt"); //Открыть файл для чтения/записи FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); //Создать массив байт, размером равный длине FileStream byte[] fileBytes = new byte[fs.Length]; //Определить счетчик для проверки количества байт, которые нужно прочитать. Уменьшать счетчик при чтении каждого байта int numBytesToRead = (int)fileBytes.Length; //Счетчик указывает количество уже прочитанных байт int numBytesRead = 0; //Итерировать до тех пор, пока не будут прочитаны все байты из FileStream while (numBytesToRead > 0) { int n = fs.Read(fileBytes, numBytesRead, numBytesToRead); if (n == 0) break; numBytesRead += n; numBytesToRead -= n; } //После чтения всех байт из FileStream их можно преобразовать в строку с помощью кодировки UTF8 string filestring = Encoding.UTF8.GetString(fileBytes);
Как показано в приведенном выше коде, вам нужно написать много кода, чтобы читать/писать строки из FileStream. Однако с помощью StreamReader и StreamWriter можно легко выполнить те же чтение/запись операции.
Ниже приведен пример того, как StreamReader упрощает чтение строк из файла:
Пример: Чтение файла с помощью StreamReader
//Создать FileInfo объект для указанного пути FileInfo fi = new FileInfo(@"D:\DummyFile.txt"); //Открыть файл для чтения/записи FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read); //Создать объект StreamReader, передаваяFileStream объект, который нужно обработать StreamReader sr = new StreamReader(fs); //Использовать метод ReadToEnd для чтения всего содержимого файла string fileContent = sr.ReadToEnd(); //Закрыть объект StreamReader после выполнения операции sr.Close(); fs.Close();
Обратите внимание, что fi.Open() имеет три параметра:
Первый параметр FileMode используется для создания и открытия файла (если файл не существует);
Второй параметр FileAccess означает операцию чтения;
Третий параметр делится файлом с другими пользователями для чтения при открытии файла.
Следующий пример показывает, как StreamWriter упрощает写入 строки в файл:
Пример: Использование StreamWriter для записи текста в файл
//Создать FileInfo объект для указанного пути FileInfo fi = new FileInfo(@"D:\DummyFile.txt"); //Открыть файл для чтения/записи FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read ); //Создать StreamWriter объект для записи строки в FileStream StreamWriter sw = new StreamWriter(fs); sw.WriteLine("Ещё строка из StreamWriter"); sw.Close();
Нельзя одновременно выполнять чтение и запись на один и тот же FileStream объект. Если вы уже читаете файл, создайте отдельный FileStream объект для записи в тот же файл, как показано ниже:
Пример: StreamReader и StreamWriter
//为DummyFile.txt创建FileInfo对象 FileInfo fi = new FileInfo(@"D:\DummyFile.txt"); //打开DummyFile.txt进行读取操作 FileStream fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite , FileShare.ReadWrite); //打开DummyFile.txt进行写操作 FileStream fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); //获取StreamReader StreamReader sr = new StreamReader(fsToRead); //使用StreamReader对象读取所有文本 string fileContent = sr.ReadToEnd(); sr.Close(); //获取StreamWriter StreamWriter sw = new StreamWriter(fsToWrite); //Написать текст с помощью StreamWriter sw.WriteLine("Ещё строка из StreamWriter"); sw.Close(); //Закрыть все Stream объекты fsToRead.Close(); fsToWrite.Close();
Таким образом, вы можете использовать классы FileInfo, StreamReader и StreamWriter для чтения/записи содержимого физического файла.