Работа с файлами и каталогами C#

Сегодня поговорим о файлах и каталогах. Используем разные примеры методов которые вы будете применять часто в своих программах. Я постарался описать практически все варианты для работы с файлами и каталогами, методы и подходы.

 

Как создать текстовый фаил и сохранить в нем текст?

Что бы создать и записать текст в фаил используем следующий пример:

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);
		}

 

 

 

Обновлено: 06.11.2018 — 10:30

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.