Манипулирование файлами и каталогами в C#
1. Иерархия классов
Class | Описание |
File | Файл - это служебный класс. Он предоставляет методы для создания, копирования, удаления, перемещения и открытия одного файла, а также помогает в создании объектов FileStream. |
Directory | Directory (каталог) - это служебный класс. Он предоставляет статические методы для создания, перемещения и перечисления через каталоги и подкаталоги. Этот класс не может быть унаследован. |
FileInfo | FileInfo - класс, представляющий файл. Он предоставляет свойства и методы экземпляров для создания, копирования, удаления, перемещения и открытия файлов, а также помогает в создании объектов FileStream. Этот класс не может быть унаследован. |
DirectoryInfo | DirectoryInfo - это класс, представляющий каталог. Он предоставляет методы для создания, перемещения и перечисления через каталоги и подкаталоги. Этот класс не может быть унаследован. |
DriveInfo | DirveInfo - это класс, он обеспечивает доступ к информации на диске. |
2. File
Файл - это утилитарный класс. Он предоставляет методы для создания, копирования, удаления, перемещения и открытия одного файла, а также помогает в создании объектов FileStream.
В приведенном ниже примере проверяется, существует ли ссылка к файлу или нет, удалите этот файл, если он существует.
DeleteFileDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class DeleteFileDemo
{
public static void Main(string[] args)
{
string filePath = "C:/test/test.txt";
// Проверить существует ли данная ссылка или нет?
if (File.Exists(filePath))
{
// Удалить файл
File.Delete(filePath);
// Проверить существует ли еще файл.
if (!File.Exists(filePath))
{
Console.WriteLine("File deleted...");
}
}
else
{
Console.WriteLine("File test.txt does not yet exist!");
}
Console.ReadKey();
}
}
}
Запуск примера:
File deleted...
Переименование файла это действие, которое может включать в себя перемещение файла в другую папку и переименование файла. В случае перемещения файла в новую папку, убедитесь, что эта папка существует.
RenameFileDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class RenameFileDemo
{
public static void Main(string[] args)
{
String filePath = "C:/test/test.txt";
if (File.Exists(filePath))
{
Console.WriteLine(filePath + " exist");
Console.WriteLine("Please enter a new name for this file:");
// String, который вводит пользователь.
// Например: C:/test/test2.txt
string newFilename = Console.ReadLine();
if (newFilename != String.Empty)
{
// Переименовать файл:
// Может включать, передачу файла к другой родительской папке, и переименование файла.
// Нужно удостовериться, что новая родительская папка существует.
// (если нет, исключение DirectoryNotFoundException будет выброшено).
File.Move(filePath, newFilename);
if (File.Exists(newFilename))
{
Console.WriteLine("The file was renamed to " + newFilename);
}
}
}
else
{
Console.WriteLine("Path " + filePath + " does not exist.");
}
Console.ReadLine();
}
}
}
Запуск примера:
C:/test/test.txt exist
Please enterr a new name for this file:
C:/test/test2.txt
The file was renamed to C:/test/test2.txt
3. Directory
Directory (каталог) - это утилитарный класс. Он предоставляет статические методы для создания, перемещения и перечисления каталогов и подкаталогов. Этот класс не позволяет иметь подклассы.
Например, проверьте, существует ли ссылка к каталогу или нет, если не существует, создайте этот каталог, запишите время создания, время последней записи в каталог, ....
DirectoryInformationDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class DirectoryInformationDemo
{
public static void Main(string[] args)
{
String dirPath = "C:/test/CSharp";
// Проверить существует ли ссылка папки или нет.
bool exist = Directory.Exists(dirPath);
// Если нет, то создать данную папку.
if (!exist)
{
Console.WriteLine(dirPath + " does not exist.");
Console.WriteLine("Create directory: " + dirPath);
// Создать папку.
Directory.CreateDirectory(dirPath);
}
Console.WriteLine("Directory Information " + dirPath);
// Распечатать информацию папки выше.
// Время создания папки.
Console.WriteLine("Creation time: "+ Directory.GetCreationTime(dirPath));
// Время последнего изменения папки.
Console.WriteLine("Last Write Time: " + Directory.GetLastWriteTime(dirPath));
// Родительская папки.
DirectoryInfo parentInfo = Directory.GetParent(dirPath);
Console.WriteLine("Parent directory: " + parentInfo.FullName);
Console.Read();
}
}
}
Запуск примера:
Directory Information C:/test/CSharp
Creation time: 12/5/2015 9:46:10 PM
Last Write Time: 12/5/2015 9:46:10 PM
Parent directory: C:\test
Переименование каталога:
Вы можете изменить имя каталога. Он может переместить эту папку из существующего родительского каталога. Но вы должны убедиться, что новый родительский каталог уже существует. Пример ниже иллюстрирует, как переименовать каталог:
RenameDirectoryDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class RenameDirectoryDemo
{
public static void Main(string[] args)
{
// Ссылка папки.
String dirPath = "C:/test/CSharp";
// Если данная ссылка существует.
if (!Directory.Exists(dirPath))
{
Console.WriteLine(dirPath + " does not exist.");
Console.Read();
return;
}
Console.WriteLine(dirPath + " exist");
Console.WriteLine("Please enter a new name for this directory:");
// String который вводит пользователь.
// Например: C:/test2/Java
string newDirname = Console.ReadLine();
if (newDirname == String.Empty)
{
Console.WriteLine("You not enter new directory name. Cancel rename.");
Console.Read();
return;
}
// Если ссылка, которую вводит пользователь существует.
if (Directory.Exists(newDirname))
{
Console.WriteLine("Cannot rename directory. New directory already exist.");
Console.Read();
return;
}
// Родительская папка.
DirectoryInfo parentInfo = Directory.GetParent(newDirname);
// Создать родительскую папку папки введенной пользователем.
Directory.CreateDirectory(parentInfo.FullName);
// Вы можете поменять ссылку (path) папки.
// но нужно удостовериться, что родительская ссылка новой ссылки существует.
// (Если нет, исключение DirectoryNotFoundException будет выброшено).
Directory.Move(dirPath, newDirname);
if (Directory.Exists(newDirname))
{
Console.WriteLine("The directory was renamed to " + newDirname);
}
Console.ReadLine();
}
}
}
Запуск примера:
C:/test/CSharp exist
Please enter a new name for this directory:
C:/test2/Java
The directory was renamed to C:/test2/Java
Пример ниже рекурсия и распечатка всех подкаталогов, (дочерних,внуков, ... ) каталога.
EnumeratingDirectoryDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class EnumeratingDirectoryDemo
{
public static void Main(string[] args)
{
string dirPath = "C:/Windows/System32";
PrintDirectory(dirPath);
Console.Read();
}
// Рекурсивный метод (Recursive) перечисляет все подпапки одной папки.
public static void PrintDirectory(string dirPath)
{
try
{
// Если вы не имеете права доступа в папку 'dirPath'
// исключение UnauthorizedAccessException будет выброшено
IEnumerable<string> enums = Directory.EnumerateDirectories(dirPath);
List<string> dirs = new List<string>(enums);
foreach (var dir in dirs)
{
Console.WriteLine(dir);
PrintDirectory(dir);
}
}
// Ошибка безопасности при доступе в папку, в которую у вас нет права.
catch (UnauthorizedAccessException e)
{
Console.WriteLine("Can not access directory: " + dirPath);
Console.WriteLine(e.Message);
}
}
}
}
Запуск примера:
...
C:/Windows/System32\wbem\en-US
C:/Windows/System32\wbem\Logs
C:/Windows/System32\wbem\Repository
C:/Windows/System32\wbem\tmf
C:/Windows/System32\wbem\eml
C:/Windows/System32\WCN
C:/Windows/System32\WCN\en-US
...
4. FileInfo
FileInfo - класс, представляющий файл. Он предоставляет свойства и методы для создания, копирования, удаления, перемещения и открытия файла. Также помогает в создании объекта FileStream. Этот класс не позволяет иметь подклассы
Разница между 2 классами File и FileInfo заключается в том, что File - это утилитарный класс, все его методы - статические, а FileInfo представляет определенный файл.
FileInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class FileInfoDemo
{
static void Main(string[] args)
{
// Объект представляющий файл.
FileInfo testFile = new FileInfo("C:/test/test.txt");
if (testFile.Exists)
{
Console.WriteLine(testFile.FullName + " exist.");
// Информация времени создания файла.
Console.WriteLine("Creation time: " + testFile.CreationTime);
// Информация, когда файл был изменен в последний раз.
Console.WriteLine("Last Write Time " + testFile.LastWriteTime);
// Имя папки, содержащей данный файл.
Console.WriteLine("Directory Name: " + testFile.DirectoryName);
}
else
{
Console.WriteLine(testFile.FullName + " does not exist.");
}
Console.Read();
}
}
}
Запуск примера:
C:\test\test.txt exist.
Creation time: 12/5/2015 7:47:40 PM
Last Write Time 12/5/2015 10:17:29 PM
Directory Name: C:\test
Переименование файла может включать в себя перемещение файла в другой каталог и переименование файла. В случае перемещения файла в другую каталог, нужно убедиться, что этот каталог существует.
RenameFileInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class RenameFileInfoDemo
{
public static void Main(string[] args)
{
FileInfo fileInfo = new FileInfo("C:/test/test.txt");
if (!fileInfo.Exists)
{
Console.WriteLine(fileInfo.FullName + " does not exist.");
Console.Read();
return;
}
Console.WriteLine(fileInfo.FullName + " exist");
Console.WriteLine("Please enter a new name for this file:");
// String, который введен пользователем.
// Пример: C:/test/test2.txt
string newFilename = Console.ReadLine();
if (newFilename == String.Empty)
{
Console.WriteLine("You not enter new file name. Cancel rename");
Console.Read();
return;
}
FileInfo newFileInfo = new FileInfo(newFilename);
// Если 'newFileInfo' существует (Невозможно переименовать).
if (newFileInfo.Exists)
{
Console.WriteLine("Can not rename file to " + newFileInfo.FullName + ". File already exist.");
Console.Read();
return;
}
// Создать родительскую папку 'newFileInfo'.
newFileInfo.Directory.Create();
// Переименовать файл.
fileInfo.MoveTo(newFileInfo.FullName);
// Refresh.
newFileInfo.Refresh();
if (newFileInfo.Exists)
{
Console.WriteLine("The file was renamed to " + newFileInfo.FullName);
}
Console.ReadLine();
}
}
}
Запуск примера:
C:\test\test.txt exist
Please enter a new name for this file:
C:/test2/test2.txt
The file was renamed to C:\test2\test2.txt
5. DirectoryInfo
DirectoryInfo - это класс, представляющий каталог. Он предоставляет методы для создания, перемещения и перечисления каталогов и подкаталогов. Этот класс не позволяет иметь подклассы
Разница между 2 классами Directory и DirectoryInfo заключается в том, что Directory является утилитарным классом, все его методы являются статическими, а DirectoryInfo представляет конкретный каталог.
DirectoryInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class DirectoryInfoDemo
{
static void Main(string[] args)
{
// Объект представляет папку.
DirectoryInfo dirInfo = new DirectoryInfo("C:/Windows/System32/drivers");
// Записать информацию.
// Информация дня создания файла.
Console.WriteLine("Creation time: " + dirInfo.CreationTime);
// Информация времени последнего изменения файла.
Console.WriteLine("Last Write Time " + dirInfo.LastWriteTime);
// Название папки.
Console.WriteLine("Directory Name: " + dirInfo.FullName);
// Массив подпапок.
DirectoryInfo[] childDirs = dirInfo.GetDirectories();
// Массив файлов находящихся в папке.
FileInfo[] childFiles = dirInfo.GetFiles();
foreach(DirectoryInfo childDir in childDirs ){
Console.WriteLine(" - Directory: " + childDir.FullName);
}
foreach (FileInfo childFile in childFiles)
{
Console.WriteLine(" - File: " + childFile.FullName);
}
Console.Read();
}
}
}
Запуск примера:
Creation time: 7/14/2009 10:20:14 AM
Last Write Time 11/21/2010 2:06:51 PM
Directory Name: C:\Windows\System32\drivers
- Directory: C:\Windowws\System32\drivers\en-US
- File: C:\Windowws\System32\gm.dls
- File: C:\Windowws\System32\gmreadme.txt
- File: C:\Windowws\System32\winmount.sys
6. DriveInfo
DirveInfo - это класс, он обеспечивает методы доступа к информации на диске.
DriveInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace FileDirectoryTutorial
{
class DriveInfoDemo
{
static void Main(string[] args)
{
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo drive in drives)
{
Console.WriteLine(" ============================== ");
// Имя драйва (C, D, ..)
Console.WriteLine("Drive {0}", drive.Name);
// Тип драйва (Removable,..)
Console.WriteLine(" Drive type: {0}", drive.DriveType);
// Если драйв готов.
if (drive.IsReady)
{
Console.WriteLine(" Volume label: {0}", drive.VolumeLabel);
Console.WriteLine(" File system: {0}", drive.DriveFormat);
Console.WriteLine(
" Available space to current user:{0, 15} bytes",
drive.AvailableFreeSpace);
Console.WriteLine(
" Total available space: {0, 15} bytes",
drive.TotalFreeSpace);
Console.WriteLine(
" Total size of drive: {0, 15} bytes ",
drive.TotalSize);
}
}
Console.Read();
}
}
}
Запуск примера:
Pуководства C#
- Наследование и полиморфизм в C#
- Что мне нужно для начала работы с C#?
- Быстрый обучение C# для начинающих
- Установите Visual Studio 2013 в Windows
- Абстрактный класс и Interface в C#
- Установите Visual Studio 2015 в Windows
- Сжатие и декомпрессия в C#
- Руководство по программированию многопоточности C#
- Руководство C# Delegate и Event
- Установите AnkhSVN в Windows
- Программирование C# для группы использующей Visual Studio и SVN
- Установить .Net Framework
- Access Modifier (Модификатор доступа) в C#
- Руководство C# String и StringBuilder
- Руководство C# Property
- Руководство C# Enum
- Руководство C# Structure
- Руководство C# Generics
- Обработка исключений для C#
- Руководство C# Date Time
- Манипулирование файлами и каталогами в C#
- Руководство CSharp Streams - двоичные потоки в C#
- Руководство Регулярное выражение C#
- Подключиться к базе данных SQL Server в C#
- Работа с базой данных SQL Server на C#
- Подключиться к базе данных MySQL в C#
- Работа с базой данных MySQL на C#
- Подключиться к базе данных Oracle в C# без Oracle Client
- Работа с базой данных Oracle на C#
Show More