Сегодня поговорим о файлах и каталогах. Используем разные примеры методов которые вы будете применять часто в своих программах. Я постарался описать практически все варианты для работы с файлами и каталогами, методы и подходы.
Как создать текстовый фаил и сохранить в нем текст?
Что бы создать и записать текст в фаил используем следующий пример:
File.WriteAllText("test.txt", "nookery it's fun!!");
В данном примере создается фаил и в него записывается текст, если фаил существует, фаил будет перезаписан с новым текстом.
Как сохранить массив строк в фаил?
File.WriteAllLines("test1.txt", new[] { "Hello", "world" });
Как сохранить массив байт в фаил?
File.WriteAllBytes("text.dat", new byte[10240]);
Как произвести чтение данных из файла?
string text = File.ReadAllText("text.txt");
Как произвести чтение массива строк из файла?
string[] lines = File.ReadAllLines("text1.txt");
Как произвести чтение массива byte из файла?
byte[] bytes = File.ReadAllBytes("text.dat");
Как узнать имена всех файлов в каталоге?
Рассмотрим пример который позволяет узнать все имена текущего каталога исполняемого файла. Точка в пути означает текущую директорию.
foreach (var file in Directory.GetFiles("."))
Console.WriteLine(file);
Пример ниже выводит в консоль все файлы хранящиеся в каталоге C:\
foreach (var file in Directory.GetFiles("C:\\"))
Console.WriteLine(file);
Как узнать имена файлов и папок находящихся в каталоге?
foreach (var file in Directory.GetFileSystemEntries("C:\\"))
Console.WriteLine(file);
Путь каталога указывается в котором будет произведен поиск файлов и папок.
Как узнать полный путь исполняемого файла?
Для этого можно использовать пример ниже, который выведет полный путь до папки и самое имя исполняемого файла, к примеру такой C:\MyProg.exe
Console.WriteLine(Assembly.GetExecutingAssembly().Location);
Так же зная имя файла мы можем воспользоваться еще одним методом что бы узнать полный путь:
Console.WriteLine(Path.Combine(Environment.CurrentDirectory, "MyProg.exe"));
Этот способ сформирует абсолютный путь по относительному.
Как узнать полный путь директории исполняемого файла?
Console.WriteLine(Application.StartupPath);
Как узнать полный путь папки автозагрузки?
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Startup));
Как узнать полный путь до рабочего стола пользователя?
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
Как узнать место расположение установленной системы windows?
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Windows));
Как узнать имена всех физических и виртуальных дисков?
string[] disk = Environment.GetLogicalDrives();
foreach (string str in disk)
Console.WriteLine("{0}", str);
Как узнать имя компьютера?
Console.WriteLine("{0}", Environment.MachineName);
Как узнать количество ядер процессора в системе?
Console.WriteLine("{0}", Environment.ProcessorCount);
Как узнать сколько времени прошло с момента загрузки компьютера?
Console.WriteLine("{0}", Environment.TickCount);
Как узнать текущее имя пользователя?
Console.WriteLine("{0}", Environment.UserName);
Получение информации о каталоге:
static void Main()
{
// Экземпляр класса DirectoryInfo, ссылается на директорию - C:\Windows\assembly.
var directory = new DirectoryInfo(@"C:\Windows\assembly");
// Вывод информации о каталоге (Директории).
if (directory.Exists) // Если указанная директория существует, то выводим о ней информацию.
{
Console.WriteLine("FullName : {0}", directory.FullName); // Полное Имя директории, (включая путь).
Console.WriteLine("Name : {0}", directory.Name); // Имя директории, (НЕ включая путь).
Console.WriteLine("Parent : {0}", directory.Parent); // Родительская директория.
Console.WriteLine("CreationTime : {0}", directory.CreationTime); // Время создания директории.
Console.WriteLine("Attributes : {0}", directory.Attributes.ToString()); // Аттрибуты.
Console.WriteLine("Root : {0}", directory.Root); // Корневой диск, на котором находится директория.
Console.WriteLine("LastAccessTime: {0}", directory.LastAccessTime); // Время последнего доступа к директории.
Console.WriteLine("LastWriteTime : {0}", directory.LastWriteTime); // Время последнего изменения файлов в директории.
}
else
{
Console.WriteLine("Директория с именем: {0} не существует.", directory.FullName);
}
// Delay.
Console.ReadKey();
}
Создание каталога:
static void Main()
{
var directory = new DirectoryInfo(@".");
Console.WriteLine(directory.FullName);
// Создание в TESTDIR новых подкаталогов.
if (directory.Exists)
{
// Создаем D:\TESTDIR\SUBDIR.
directory.CreateSubdirectory("SUBDIR");
// Создаем D:\TESTDIR\MyDir\SubMyDir.
directory.CreateSubdirectory(@"MyDir\SubMyDir");
Console.WriteLine("Директории созданы.");
}
else
{
Console.WriteLine("Директория с именем: {0} не существует.", directory.FullName);
}
// Delay.
Console.ReadKey();
}
Копирование каталога:
// Simple synchronous file move operations with no user interface.
public class SimpleFileMove
{
static void Main()
{
string sourceFile = @"C:\Users\Public\public\test.txt";
string destinationFile = @"C:\Users\Public\private\test.txt";
// To move a file or folder to a new location:
System.IO.File.Move(sourceFile, destinationFile);
// To move an entire directory. To programmatically modify or combine
// path strings, use the System.IO.Path class.
System.IO.Directory.Move(@"C:\Users\Public\public\test\", @"C:\Users\Public\private");
}
}
Удаление каталога:
try
{
System.IO.Directory.Delete(@"C:\Users\Public\DeleteTest");
}
catch (System.IO.IOException e)
{
Console.WriteLine(e.Message);
}
// Delete a directory and all subdirectories with Directory static method...
if(System.IO.Directory.Exists(@"C:\Users\Public\DeleteTest"))
{
try
{
System.IO.Directory.Delete(@"C:\Users\Public\DeleteTest", true);
}
catch (System.IO.IOException e)
{
Console.WriteLine(e.Message);
}
}
// ...or with DirectoryInfo instance method.
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"C:\Users\Public\public");
// Delete this dir and all subdirs.
try
{
di.Delete(true);
}
catch (System.IO.IOException e)
{
Console.WriteLine(e.Message);
}
Информация о дисках. Удаление каталога.
static void Main()
{
// Выводим информацию о дисках.
string[] drives = Directory.GetLogicalDrives();
Console.WriteLine("Имеющиеся диски:");
foreach (string drive in drives)
Console.WriteLine("- {0}", drive);
var directory = new DirectoryInfo(@".");
Console.WriteLine("\nГотовимся удалять:\n");
Console.WriteLine(directory.FullName + @"\MyDir\SubMyDir");
Console.WriteLine(directory.FullName + @"\SUBDIR");
Console.WriteLine("\nНажмите Enter для удаления.\n");
// Задержка перед удалением.
Console.ReadKey();
try
{
// Удаление каталогов.
Directory.Delete(@".\SUBDIR");
// Второй параметр определяет, будут ли удалены также и все вложенные подкаталоги.
Directory.Delete(@"D:\TESTDIR\MyDir", true);
Console.WriteLine("Каталоги успешно удалены.");
}
catch (Exception e) { Console.WriteLine(e.Message); }
// Delay.
Console.ReadKey();
}
Создание и удаление файла:
static void Main()
{
// Создаем новый файл в корневом каталоге диска D:
var file = new FileInfo(@".\Test.txt");
FileStream stream = file.Create();
// Выводим основную информацию о созданном файле.
Console.WriteLine("Full Name : {0}", file.FullName);
Console.WriteLine("Attributes : {0}", file.Attributes.ToString());
Console.WriteLine("CreationTime: {0}", file.CreationTime);
Console.WriteLine("Нажмите любую клавишу для удаления файла.");
Console.ReadKey();
// Закрываем FileStream.
stream.Close();
// Удаляем файл.
file.Delete();
Console.WriteLine("Файл успешно удален.");
// Delay.
Console.ReadKey();
}
еще один альтернативный вариант:
static void Main()
{
// Создаем новый файл в корневом каталоге диска D:
var file = new FileInfo(@"D:\Test.txt");
// FileMode.OpenOrCreate - ЕСЛИ: существует ТО: открыть ИНАЧЕ: создать новый
// FileAccess.Read - только для чтения,
// FileShare.None - Совместный доступ - Нет.
FileStream stream = file.Open(FileMode.OpenOrCreate, FileAccess.Read, FileShare.None);
// Выводим основную информацию о созданном файле.
Console.WriteLine("Full Name : {0}", file.FullName);
Console.WriteLine("Attributes : {0}", file.Attributes.ToString());
Console.WriteLine("CreationTime: {0}", file.CreationTime);
Console.WriteLine("Нажмите любую клавишу для удаления файла.");
Console.ReadKey();
// Закрываем FileStream.
stream.Close();
// Удаляем файл.
file.Delete();
Console.WriteLine("Файл успешно удален.");
// Delay.
Console.ReadKey();
}
Запись в файл.
static void Main()
{
// Создаем файл в текущем каталоге.
var stream = new FileStream("Test.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite);
// Записываем байты в файл.
for (int i = 0; i < 256; i++)
{
stream.WriteByte((byte)i);
}
Console.WriteLine(stream.Position);
// Переставляем внутренний указатель на начало.
stream.Position = 0;
// Считывам байты из файла.
for (int i = 0; i < 256; i++)
{
Console.Write(" " + stream.ReadByte());
}
// Закрываем FileStream.
stream.Close();
// Delay.
Console.ReadKey();
}
Чтение и запись файлов.
static void Main()
{
// Создаем объект класса MemoryStream.
var memory = new MemoryStream();
// Задаем требуемый объем памяти.
// memory.Capacity = 256;
// Записываем байты в поток.
for (var i = 0; i < 256; i++)
{
memory.WriteByte((byte)i);
}
// Переставляем внутренний указатель на начало.
memory.Position = 0;
// Считывам байты из потока.
for (int i = 0; i < 256; i++)
{
Console.Write(" " + memory.ReadByte());
}
Console.WriteLine("\n" + new string('-', 80));
// Сохраняем данные из MemoryStream в массив байт.
byte[] array = memory.ToArray();
foreach (byte b in array)
{
Console.Write(b);
}
Console.WriteLine("\n" + new string('-', 80));
// Сохраняем данные из MemoryStream в файл.
var file = new FileStream("Dump.dat", FileMode.Create, FileAccess.ReadWrite);
memory.WriteTo(file);
// Переставляем внутренний указатель на начало.
file.Position = 0;
// Считывам байты из файла.
for (int i = 0; i < 256; i++)
{
Console.Write(" " + file.ReadByte());
}
memory.Close();
file.Close();
// Delay.
Console.ReadKey();
}
еще один альтернативный вариант:
static void Main()
{
// Создаем файл.
var file = new FileInfo("Text.txt");
// С помощью экземпляра StreamWriter записываем в файл несколько строк текста.
StreamWriter writer = file.CreateText();
writer.WriteLine("Первая строка текста...");
writer.WriteLine("Вторая строка текста...");
// Вставляем символ начала новой строки.
writer.Write(writer.NewLine);
writer.WriteLine("Третья строка чисел:");
for (int i = 0; i < 10; i++)
{
writer.Write(i + " ");
}
// Вставляем символ начала новой строки.
writer.Write(writer.NewLine);
// Метод Close() автоматически очищает все буферы!
writer.Close();
Console.WriteLine("Файл Text.txt создан и в него записан текст.");
// Delay.
Console.ReadKey();
}
еще один альтернативный вариант:
static void Main()
{
// Создаем файл.
// var file = new FileInfo("Text.txt");
// С помощью экземпляра StreamWriter записываем в файл несколько строк текста.
// StreamWriter writer = file.CreateText();
var file2 = new FileStream("text.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
var writer = new StreamWriter(file2, Encoding.GetEncoding(1251));
writer.WriteLine("Первая строка текста...");
writer.WriteLine("Вторая строка текста...");
// Вставляем символ начала новой строки.
writer.Write(writer.NewLine);
writer.WriteLine("Третья строка чисел:");
for (int i = 0; i < 10; i++)
{
writer.Write(i + " ");
}
// Метод Close() автоматически очищает все буферы.
writer.Close();
Console.WriteLine("Файл Text.txt создан и в него записан текст.");
// Выводим информацию из файла на консоль при помощи StreamReader.
Console.WriteLine("Содержимое файла Text.txt:\n");
StreamReader reader = File.OpenText("Text.txt");
string input;
// Выводим содержимое файла в консоль.
while ((input = reader.ReadLine()) != null)
{
Console.WriteLine(input);
}
reader.Close();
// Delay.
Console.ReadKey();
}
Копирование файлов:
static void Main()
{
// Создаем объект для работы с файлом.
var file = new FileInfo(@"C:\Windows\notepad.exe");
// var dir = new DirectoryInfo(".");
// Копируем содержимое файла.
try
{
file.CopyTo(@"D:\notepad.exe");
Console.WriteLine("Файл успешно скопирован!");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
// Delay.
Console.ReadKey();
}
Получение информации о дисках:
static void Main()
{
// Создание коллекции дисков.
DriveInfo[] drives = DriveInfo.GetDrives();
// Вывод информации о дисках компьютера.
foreach (DriveInfo drive in drives)
{
Console.WriteLine("Drive: {0} Type: {1}", drive.Name, drive.DriveType);
}
// Delay.
Console.ReadKey();
}
Отслеживание изменений в системе:
static void Main()
{
// Создание наблюдателя и сосредоточение его внимания на системном диске.
var watcher = new FileSystemWatcher { Path = @"." };
// Зарегистрировать обработчики событий.
watcher.Created += new FileSystemEventHandler(WatcherChanged);
// watcher.Deleted += WatcherChanged;
// Начать мониторинг.
watcher.EnableRaisingEvents = true;
// Delay.
var change = watcher.WaitForChanged(WatcherChangeTypes.All);
Console.WriteLine(change.ChangeType);
}
// Обработчик события.
static void WatcherChanged(object sender, FileSystemEventArgs e)
{
Console.WriteLine("Directory changed({0}): {1}", e.ChangeType, e.FullPath);
}
Отслеживание переименования файла:
static void Main()
{
// Создание наблюдателя.
var watcher = new FileSystemWatcher(@"D:\TEMP");
// Зарегистрировать обработчики событий.
watcher.Renamed += new RenamedEventHandler(WatcherRenamed);
// Начать мониторинг.
watcher.EnableRaisingEvents = true;
// Delay.
Console.ReadKey();
}
// Обработчик события.
static void WatcherRenamed(object sender, RenamedEventArgs e)
{
Console.WriteLine("Renamed from {0} to {1}", e.OldFullPath, e.FullPath);
}
