Использование класса System::IO::FileInfo для работы с файлами
(http://msdn.microsoft.com/ru-ru/library/system.io.fileinfo.aspx)
Таблица 11.11. Основные поля, свойства и методы класса FileInfo из пространства имен System::IO
Имя
| Описание
| Поля
|
| FullPath
| Представляет полный путь к каталогу или файлу.
| OriginalPath
| Первоначально заданный пользователем относительный или абсолютный путь.
|
Свойства
|
| Attributes
| Получает или задает атрибуты для текущего файла или каталога. Значение этого свойства представляет сочетание флагов атрибутов файла (из перечисления FileAttributes, таблица 11.7).
| CreationTime
| Получает или задает время создания текущего файла или каталога.
| Directory
| Получает экземпляр родительского каталога файла.
| DirectoryName
| Получает строку, представляющую полный путь к каталогу.
| Exists
| Получает значение (типа bool), показывающее, существует ли файл (true) или нет (false).
| Extension
| Получает строку, содержащую расширение файла.
| FullName
| Получает строку, содержащую полный путь к каталогу или файлу.
| IsReadOnly
| Возвращает или задает значение (типа bool), определяющее, является ли текущий файл доступным только для чтения (true) или нет (false).
| LastAccessTime
| Получает или задает время последнего доступа к текущему файлу или каталогу.
| LastWriteTime
| Получает или задает время последней операции записи в текущий файл или каталог.
| Length
| Получает размер текущего файла в байтах.
| Name
| Получает строку, содержащую имя и расширение файла.
|
Методы
|
| AppendText(sf);
| Добавляет в существующий файл (sf, объект StreamWriter) текст в кодировке UTF-8.
| CopyTo(sf2);
CopyTo(sf2,w);
| Копирует существующий текущий файл (sf1) в новый файл (sf2) с возможностью перезаписи (w) или без нее. При возможной перезаписи аргумент w равен true, если конечный файл можно перезаписать, в противном случае – false.
| Create();
| Создает новый файл (объект FileStream). При этом по умолча-нию используются следующие значения перечислений (таблица 11.8): FileMode.Create, FileAccess.ReadWrite и FileShare.None .
| CreateText();
| Создает файл (объект StreamWriter) для записи текста в кодировке UTF-8.
| Delete();
| Удаляет файл без возможности восстановления. Если указанный файл не существует, исключение не создается.
| MoveTo(sf2);
| Перемещает заданный текущий файл в новое место (sf2) и разрешает его переименование.
| Open(md);
Open(md,access);
Open(md,access,shr);
| Открывает файл (объект FileStream). Аргументы определяют:
md – режим доступа к файлу (перечисление FileMode, таблица 11.8);
access – тип доступа к файлу (перечисление FileAccess, таблица 11.8);
shr – тип разрешения доступа к файлу другим процессам (перечисление FileShare, таблица 11.8).
| OpenRead();
| Открывает для чтения существующий файл (объект FileStream). При этом по умолчанию используются следующие значения перечислений (таблица 11.8): FileMode.Open , FileAccess.Read и FileShare.Read .
| OpenText();
| Открывает для чтения существующий файл (объект StreamWriter), содержащий текст в кодировке UTF-8.
| OpenWrite();
| Открывает для записи существующий файл (объект FileStream) или создает новый. При этом по умолчанию используются следующие значения перечислений (таблица 11.8): FileMode.OpenOrCreate , FileAccess.Write и FileShare.None .
| Refresh();
| Обновляет состояние объекта. Этот метод рекомендуется вызывать перед попыткой получения сведений об атрибутах, иначе сведения могут оказаться устаревшими.
| Replace(sf1,sf2);
| Заменяет содержимое одного файла (sf1) содержимым текущего файла, удаляя исходный файл (sf1) и создавая резервную копию (sf2) замененного файла.
| ToString();
| Возвращает строку, содержащую путь.
|
Пример 11.11. Использование методов Exists, CreateText, OpenText, CopyTo, Delete класса FileInfo для создания и открытия текстового файла, записи в него, затем для чтения из него, и, наконец, копирования и удаления файла.
#include "stdafx.h"
using namespace System;
using namespace System::IO;
int main() {
String^ path = "c:\\temp\\Test.txt";
FileInfo^ fi1 = gcnew FileInfo(path);
// Создание файла для записи, если он не существовал.
if (!fi1->Exists) {
StreamWriter^ sw = fi1->CreateText();
sw->WriteLine("Hello"); // Запись
sw->WriteLine("and"); // строк
sw->WriteLine("Welcome"); // в файл.
sw->Close(); // Закрытие файла
}
// Открытие файла для чтения.
StreamReader^ sr = fi1->OpenText();
String^ line = "";
Console::WriteLine("Файл {0} содержит:", path);
while (line = sr->ReadLine()) // Чтение строк из файла
Console::WriteLine(line); // Вывод считанных строк
sr->Close(); // Закрытие файла
Console::ReadLine();
String^ path2 = "c:\\temp\\Test2.txt";
FileInfo^ fi2 = gcnew FileInfo(path2);
fi1->CopyTo(path2); // Копирование файла
Console::WriteLine("Файл {0} был скопирован в {1} .",
path, path2);
// Открытие нового файла для чтения.
StreamReader^ sr2 = fi2->OpenText();
Console::WriteLine("Файл {0} содержит:", path2);
// Чтение строк из скопированного файла и вывод их на экран
while (line = sr2->ReadLine())
Console::WriteLine(line);
sr2->Close(); // Закрытие файла
Console::ReadLine();
fi2->Delete(); // Удаление скопированного файла
Console::WriteLine("Файл {0} был успешно удален.", path2);
Console::ReadLine();
return 0;
}
/* Вывод:
Файл c:\temp\Test.txt содержит:
Hello
and
Welcome
Файл c:\temp\Test.txt был скопирован в c:\temp\Test.txt .
Файл c:\temp\Test2.txt содержит:
Hello
and
Welcome
Файл c:\temp\Test2.txt был успешно удален.
*/
11.7. Использование класса System::IO::DirectoryInfo для работы с файлами и папками
(http://msdn.microsoft.com/ru-ru/library/system.io.directoryinfo.aspx)
Таблица 11.12. Основные свойства и методы класса DirectoryInfo из пространства имен System::IO
Имя
| Описание
| Поля
|
| FullPath
| Представляет полный путь к каталогу или файлу.
| OriginalPath
| Первоначально заданный пользователем относительный или абсолютный путь.
| Свойства
|
| Attributes
| Получает или задает атрибуты для текущего файла или каталога. Значение этого свойства представляет сочетание флагов атрибутов файла (из перечисления FileAttributes, таблица 11.6).
| CreationTime
| Получает или задает время создания текущего файла или каталога.
| Exists
| Получает значение (типа bool), показывающее, существует ли файл (true) или нет (false).
| Extension
| Получает строку, содержащую расширение файла.
| FullName
| Получает строку, содержащую полный путь к каталогу или файлу.
| LastAccessTime
| Получает или задает время последнего доступа к текущему файлу или каталогу.
| LastWriteTime
| Получает или задает время последней операции записи в текущий файл или каталог.
| Name
| Получает строку, содержащую имя текущего каталога (объекта DirectoryInfo).
| Parent
| Получает родительский каталог заданного подкаталога.
| Root
| Получает корневой элемент пути.
|
Методы
|
| Create();
| Создает новый каталог.
| CreateSubdirectory(sd);
| Создает один или несколько подкаталогов по заданному пути (sd, до 248 символов). Путь может быть задан относительно текущего объекта DirectoryInfo.
| Delete();
Delete(c);
| Удаляет каталог (текущий DirectoryInfo), если он пуст, или со всем содержимым (c = true).
| EnumerateDirectories();
EnumerateDirectories(tp);
EnumerateDirectories (tp,op);
| Возвращает перечисляемую коллекцию сведений о каталогах в текущем каталоге, соответствующих указанному шаблону поиска (tp). Возможно, поиск ведется также и в подкаталогах (op):
TopDirectoryOnly – поиск только в текущем каталоге (по умолчанию);
AllDirectories – поиск в текущем каталоге и во всех подкаталогах.
| EnumerateFiles();
EnumerateFiles(tp);
EnumerateFiles(tp,op);
| Возвращает перечисляемую коллекцию сведений о файлах в текущем каталоге, соответствующих шаблону поиска (tp). Возможно, поиск ведется также и в подкаталогах (op):
TopDirectoryOnly – поиск только в текущем каталоге (по умолчанию);
AllDirectories – поиск в текущем каталоге и во всех подкаталогах.
| EnumerateFileSystemInfos();
EnumerateFileSystemInfos (tp);
EnumerateFileSystemInfos (tp,op);
| Возвращает перечисляемую коллекцию сведений о файлах и каталогах в текущем каталоге, соответствующих указанному шаблону поиска. Возможно, поиск ведется также и в подкаталогах (op):
TopDirectoryOnly – поиск только в текущем каталоге (по умолчанию);
AllDirectories – поиск в текущем каталоге и во всех подкаталогах.
| GetDirectories();
GetDirectories(tp);
GetDirectories(tp,op);
| Возвращает массив каталогов (объектов DirectoryInfo) в текущем каталоге, соответствующих шаблону поиска (tp), с возможностью поиска и в подкаталогах (op):
TopDirectoryOnly – поиск только в текущем каталоге (по умолчанию);
AllDirectories – поиск в текущем каталоге и во всех подкаталогах.
| GetFiles();
GetFiles(tp);
GetFiles(tp,op);
| Возвращает массив файлов (объектов FileInfo) в текущем каталоге, соответствующих шаблону поиска (tp), с возможностью поиска и в подкаталогах (op):
TopDirectoryOnly – поиск только в текущем каталоге (по умолчанию);
AllDirectories – поиск в текущем каталоге и во всех подкаталогах.
| GetFileSystemInfos();
GetFileSystemInfos(tp);
GetFileSystemInfos(tp,op);
| Возвращает массив файлов и каталогов (объектов FileSystemInfo) в текущем каталоге, соответствующих шаблону поиска (tp) с возможностью поиска и в подкаталогах (op):
TopDirectoryOnly – поиск только в текущем каталоге (по умолчанию);
AllDirectories – поиск в текущем каталоге и во всех подкаталогах.
| MoveTo(sd2);
| Перемещает текущий каталог (объект DirectoryInfo) и его содержимое в новое место (sd2).
| Refresh();
| Обновляет состояние объекта. Этот метод рекомендуется вызывать перед попыткой получения сведений об атрибутах, иначе сведения могут оказаться устаревшими.
| ToString();
| Возвращает строку, содержащую исходный путь, переданный пользователем.
|
Пример 11.12. Использование свойств Exists, Name и методов Create, CreateSubdirectory, GetDirectories, GetFiles, MoveTo, Delete класса DirectoryInfo для определения факта существования папок, создания, перемещения и удаления папок, а также вывода содержимого папки и подсчет папок и файлов в ней.
#include "stdafx.h"
using namespace System;
using namespace System::IO;
int main() {
String^ currentDir = "c:\\temp";
String^ sourceDir = currentDir + "\\Source";
String^ destDir = currentDir + "\\Destination";
String^ moveDir = destDir + "\\Source";
// Объявление папок (объектов DirectoryInfo) для управления.
DirectoryInfo^ cd = gcnew DirectoryInfo(currentDir);
DirectoryInfo^ sd = gcnew DirectoryInfo(sourceDir);
DirectoryInfo^ dd = gcnew DirectoryInfo(destDir);
DirectoryInfo^ md = gcnew DirectoryInfo(moveDir);
if (cd->Exists) { // Если заданная папка существует...
// Создание папок и файлов
sd->Create(); // Создание
DirectoryInfo^ sdd = sd->CreateSubdirectory("Dir"); // новых
dd->Create(); // папок
StreamWriter^ f1 = File::CreateText(sourceDir +
"\\Test1.txt"); // Созание файла
f1->WriteLine("Test 1"); // Запись в файл
f1->Close(); // Закрытие файла
StreamWriter^ f2 = File::CreateText(sourceDir +
"\\Test2.txt"); // Созание файла
f2->WriteLine("Test 2"); // Запись в файл
f2->Close(); // Закрытие файла
Console::WriteLine("Папки и файлы созданы.");
}
Console::ReadLine();
// Вывод содержимого папки и подсчет папок и файлов в ней
Console::WriteLine("Содержимое папки {0}:", sourceDir);
array<DirectoryInfo^>^ sdArr = sd->GetDirectories();
for each (DirectoryInfo^ fName in sdArr)
Console::WriteLine(" {0}\t\t<папка>", fName->Name);
array<FileInfo^>^ sfArr = sd->GetFiles();
for each (FileInfo^ fName in sfArr)
Console::WriteLine(" {0}", fName->Name);
Console::WriteLine("Итого: {0} папок и {1} файлов.",
sd->GetDirectories()->Length, sd->GetFiles()->Length);
Console::ReadLine();
if (sd->Exists & dd->Exists & !md->Exists) {
sd->MoveTo(moveDir); // Перемещение папки
Console::WriteLine("Папка {0} перемещена в {1} .",
sourceDir, moveDir);
}
Console::ReadLine();
if (dd->Exists) { // Если папка существует
dd->Delete(true); // Удаление папки
Console::WriteLine("Папка {0} со всем содержимым удалена.",
destDir);
}
Console::ReadLine();
return 0;
}
/* Вывод:
Папки и файлы созданы.
Содержимое папки c:\temp\Source :
Dir <папка>
Test1.txt
Test2.txt
Итого: 1 папок и 2 файлов.
Папка c:\temp\Source перемещена в c:\temp\Destination\Source .
Папка c:\temp\Destination со всем содержимым удалена.
*/
|