Сегодня поговорим о файлах и каталогах. Используем разные примеры методов которые вы будете применять часто в своих программах. Я постарался описать практически все варианты для работы с файлами и каталогами, методы и подходы.
Как создать текстовый фаил и сохранить в нем текст?
Что бы создать и записать текст в фаил используем следующий пример:
1 |
File.WriteAllText("test.txt", "nookery it's fun!!"); |
В данном примере создается фаил и в него записывается текст, если фаил существует, фаил будет перезаписан с новым текстом.
Как сохранить массив строк в фаил?
1 |
File.WriteAllLines("test1.txt", new[] { "Hello", "world" }); |
Как сохранить массив байт в фаил?
1 |
File.WriteAllBytes("text.dat", new byte[10240]); |
Как произвести чтение данных из файла?
1 |
string text = File.ReadAllText("text.txt"); |
Как произвести чтение массива строк из файла?
1 |
string[] lines = File.ReadAllLines("text1.txt"); |
Как произвести чтение массива byte из файла?
1 |
byte[] bytes = File.ReadAllBytes("text.dat"); |
Как узнать имена всех файлов в каталоге?
Рассмотрим пример который позволяет узнать все имена текущего каталога исполняемого файла. Точка в пути означает текущую директорию.
1 2 |
foreach (var file in Directory.GetFiles(".")) Console.WriteLine(file); |
Пример ниже выводит в консоль все файлы хранящиеся в каталоге C:\
1 2 |
foreach (var file in Directory.GetFiles("C:\\")) Console.WriteLine(file); |
Как узнать имена файлов и папок находящихся в каталоге?
1 2 |
foreach (var file in Directory.GetFileSystemEntries("C:\\")) Console.WriteLine(file); |
Путь каталога указывается в котором будет произведен поиск файлов и папок.
Как узнать полный путь исполняемого файла?
Для этого можно использовать пример ниже, который выведет полный путь до папки и самое имя исполняемого файла, к примеру такой C:\MyProg.exe
1 |
Console.WriteLine(Assembly.GetExecutingAssembly().Location); |
Так же зная имя файла мы можем воспользоваться еще одним методом что бы узнать полный путь:
1 |
Console.WriteLine(Path.Combine(Environment.CurrentDirectory, "MyProg.exe")); |
Этот способ сформирует абсолютный путь по относительному.
Как узнать полный путь директории исполняемого файла?
1 |
Console.WriteLine(Application.StartupPath); |
Как узнать полный путь папки автозагрузки?
1 |
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Startup)); |
Как узнать полный путь до рабочего стола пользователя?
1 |
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)); |
Как узнать место расположение установленной системы windows?
1 |
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Windows)); |
Как узнать имена всех физических и виртуальных дисков?
1 2 3 4 |
string[] disk = Environment.GetLogicalDrives(); foreach (string str in disk) Console.WriteLine("{0}", str); |
Как узнать имя компьютера?
1 |
Console.WriteLine("{0}", Environment.MachineName); |
Как узнать количество ядер процессора в системе?
1 |
Console.WriteLine("{0}", Environment.ProcessorCount); |
Как узнать сколько времени прошло с момента загрузки компьютера?
1 |
Console.WriteLine("{0}", Environment.TickCount); |
Как узнать текущее имя пользователя?
1 |
Console.WriteLine("{0}", Environment.UserName); |
Получение информации о каталоге:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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(); } |
Создание каталога:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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(); } |
Копирование каталога:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 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"); } } |
Удаление каталога:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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); } |
Информация о дисках. Удаление каталога.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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(); } |
Создание и удаление файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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(); } |
еще один альтернативный вариант:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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(); } |
Запись в файл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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(); } |
Чтение и запись файлов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
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(); } |
еще один альтернативный вариант:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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(); } |
еще один альтернативный вариант:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
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(); } |
Копирование файлов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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(); } |
Получение информации о дисках:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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(); } |
Отслеживание изменений в системе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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); } |
Отслеживание переименования файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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); } |