3670

Робота з класами та файлами

Лекция

Информатика, кибернетика и программирование

Робота з файлами Клас Environment Клас Environment дозволяє одержати інформацію про оточення програми (поточний каталог, версія Windows і т.п.) через свої статичні члени. Приклад використання цього класу...

Украинкский

2012-11-05

1.27 MB

5 чел.

Робота з файлами

Клас Environment

Клас Environment дозволяє одержати інформацію про оточення програми (поточний каталог, версія Windows і т.п.) через свої статичні члени. Приклад використання цього класу:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

           string s;

           //Поточна папка.

           s = Environment.CurrentDirectory;

           Console.WriteLine("Поточна папка: {0}.", s);

           //Системна папка.

           s = Environment.SystemDirectory;

           Console.WriteLine("Системна папка: {0}.", s);

           //Ім'я комп'ютера.

           s = Environment.MachineName;

           Console.WriteLine("Ім'я комп'ютера: {0}.", s);

           //Oперационная система і її версія.

           OperatingSystem os = Environment.OSVersion;

           Console.WriteLine("Операційна система: {0}, версія {1}.",os.Platform, os.Version);

           //Версія платформи .NET.

           Version ver = Environment.Version;

           Console.WriteLine("Версія платформи .NET: {0}.{1}.",ver.Major, ver.Minor);

       }

   }

}

Зазначений фрагмент виведе на екран ім'я папки, у якому запущений додаток, ім'я системної папки Windows, NetBIOS ім'я комп'ютера, операційну систему і її версію, платформу .NET й її версію:

Рис. 20.1. Результат роботи програми

Клас Environment дозволяє з'ясовувати місце розташування різних спеціальних папок - SendTo, StartMenu, Program Files й ін. Це може виявитися дуже зручним, наприклад, при додаванні ярлика на програму в папку Автозавантаження або на Робочий Стіл.

Таблиця 20.1. Спеціальні папки утворять перерахування Environment.SpecialFolder:

Спеціальна папка

Опис

Cookies

Папка з cookie

DesktopDirectory

Робочий стіл

Favorites

Обране

History

Історія (Internet Explorer)

Personal

Папка "Мої документи"

ProgramFiles

Папка "Program Files"

Recent

Папка зі списоком останніх документів, що відкривають

SendTo

Папка SendTo

StartMenu

Головне меню

Startup

Папка автозавантаження

System

Системна папка Windows

Зверніть увагу, що деякі із цих папок загальні для всіх користувачів, а деякі персональні для кожного користувача.

Приклад роботи зі спеціальними папками:

     //Одержуємо папку SendTo.

           Environment.SpecialFolder p = Environment.SpecialFolder.SendTo;

           //Одержуємо шлях до папки SendTo.

           s = Environment.GetFolderPath(p);

           Console.WriteLine("Папка SendTo: {0}.", s);

           //Одержуємо папку Startup.

           p = Environment.SpecialFolder.Startup;

           //Одержуємо шлях до папки Startup.

           s = Environment.GetFolderPath(p);

           Console.WriteLine("Папка Startup: {0}.", s);

Отут спочатку записано в змінну типу Environment.SpecialFolder потрібну папку, потім витягається шлях до потрібної папки через метод GetFolderPath класу Environment.

Клас Environment дозволяє одержати й імена всіх логічних дисків комп'ютера. Робиться це через статичний метод GetLogicalDrives().

Приклад:

     string[] drives = Environment.GetLogicalDrives();

           foreach ( string ss in drives)

           {

               //Виводимо імена всіх дисків.

               Console.WriteLine(ss);

           }

Метод GetLogicalDrives() повертає строковий масив з іменами всіх дисків.

Рис.20. 2. Результат виконання програми

Простір імен System.IO. Уведення/вивід в C#.

Для операцій вводу-виводу служить простір імен System.IO.

Короткий огляд найбільш важливих класів і перерахувань із цього простору імен:

  •  BinaryReader - дозволяє читати з файлу дані різних типів (цілі, речовинні, логічні й т.п.)
  •  BinaryWriter - дозволяє записувати у файл дані різних типів (цілі, речовинні, логічні й т.п.)
  •  Directory - клас зі статичними методами для роботи з папками
  •  DirectoryInfo - клас для роботи з деякою папкою
  •  File - клас зі статичними методами для роботи з файлом
  •  FileInfo - клас для роботи з деяким файлом
  •  Path - клас для роботи з файловими шляхами
  •  Перерахування FileAttributes - атрибути файлу
  •  Перерахування FileMode - можливі способи відкриття файлу
  •  Перерахування FileAccess містить константи, що показують,  чи відкритий файл для читання, запису й ін.
  •  FileSystemWatcher - клас для відстеження змін у файловій системі
  •  Перерахування NotifyFilters - параметри, по яких відбувається відстеження змін у файловій системі
  •  Перерахування WatcherChangeTypes - які зміни відслідковуються у файловій системі

Класи для роботи з папками й файлами

Для роботи з файлами й папками в просторі імен System.IO існують наступні класи:

Directory - містить ряд статичних методів для виконання різних операцій з папками (створення, видалення, перевірка існування, одержання поточної папки й т.п.).

DirectoryInfo - аналогічний класу Directory, тільки його методи не статичні - для використання цього класу треба створити його екземпляр (параметром для конструктора служить ім'я папки).

File - містить ряд статичних методів для виконання різних операцій з файлами (створення, видалення, копіювання, запис і зчитування з файлу й т.п.).

FileInfo - аналогічний класу File, тільки його методи не статичні - для використання цього класу треба створити його екземпляр (параметром для конструктора служить ім'я файлу).

Класи Directory й File яляются безпосередніми нащадками класу Object, а класи DirectoryInfo й FileInfo - нащадками абстрактного класу FileSystemInfo.

Клас Directory

Клас Directory призначений для роботи з папками. Цей клас містить статичні методи для роботи з папками (на відміну від класу DirectoryInfo, що містить аналогічні методи, застосовувані для екземпляра класу).

Основні методи класу Directory:

  •  CreateDirectory - створює папку із зазначеним ім'ям.
  •  Exists - перевіряє існування папки із зазначеним ім'ям.
  •  Delete - видаляє папку із зазначеним ім'ям.
  •  Move - переміщає або перейменовує папку із зазначеним ім'ям.

Приклад:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

           //Створюємо папку.

           Directory.CreateDirectory("D:\\temp");

           //Перевірка існування папки.

           if (Directory.Exists("D:\\temp1"))

           {

               Console.WriteLine("Папка \"temp1\" існує");

           }

           else

           {

               Console.WriteLine("Папка \"temp1\" не існує");

           }

           if (Directory.Exists("D:\\temp"))

           {

               Console.WriteLine("Папка \"temp\" існує");

           }

           else

           {

               Console.WriteLine("Папка \"temp\" не існує");

           }

           //Переміщення папки.

           Directory.Move("D:\\temp", "D:\\temp2");

           //Видалення папки.

           Directory.Delete("D:\\temp2");

       }

   }

}

Зверніть увагу, що метод Move можна використати не тільки для переміщення, але й для перейменування папки. Для цього папка, що задає першим параметром (тобто та, котру переміщаємо) повинна перебувати на тім же рівні, що й папка, що задає другим параметром (тобто куди переміщаємо).

Клас File

Клас File призначений для роботи з файлами. Він містить статичні методи, які дозволяють створювати, видаляти, перейменовувати й робити інші дії з файлами. Для цього класу існує парний клас FileInfo, що містить аналогічні методи екземпляра класу.

Основні методи класу File:

  •  Create - створення файлу.
  •  Exists - перевірка існування файлу.
  •  Delete - видалення файлу.
  •  Move - перейменування й переміщення файлу.
  •  Copy - копіювання файлу.

Приклад, що демонструє застосування цих методів:

 // Створюємо файл.

           File.Create("d:\\a.txt");

           File.Create("d:\\1.txt");

           // Перевірка існування файлу

           if (File.Exists("d:\\1.txt"))

           {

               // Видалення файлу.

               File.Delete("C:\\1.txt");

           }

           // Перейменування файлу a.txt в b.txt.

           File.Move("d:\\a.txt", "d:\\b.txt");

           // Переміщення файлу.

           File.Move("d:\\a.txt", "D:\\c.txt");

           // Копіювання файлу.

     File.Copy("D:\\c.txt", "D:\\x.txt");

Зверніть увагу, що й для переміщення, і для перейменування файлу ми використаємо той самий статичесикий метод Move (тому що по суті це та сама операція).

Приклад, що демонструє використання методів класу для створення, записи й зчитування даних з текстових файлів:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace File1

{

   class Program

   {

       static void Main(string[] args)

       {

            string path = @"MyTest.txt";

            string path1= @"Val.txt";

            string Text = "Привіт1";

            int x;

          

           //Створення файлу для запису

           //Якщо файл існує - дані перезаписуються

           File.WriteAllText(path, Text);

           //Додавання даних у файл

           File.AppendAllText(path, "\nПривет2");

           //Додавання даних у файл

           string appendText = "\nДобавленный текст1";

           File.AppendAllText(path, appendText);

 

       // Зчитування даних з файлу 2-я методами

       string readText = File.ReadAllText(path);

       string[] readText1 = File.ReadAllLines(path);

       Console.WriteLine("Текст із файлу (ReadAllText):");

       Console.WriteLine(readText);

       Console.WriteLine("Текст із файлу (ReadAllLines):");

       foreach (string i in readText1)

       {

          Console.WriteLine(i);

       }

       //Створення файлу з використанням класу потоків FileStream

       FileStream fp = File.Create(path1);

       

       //Закриття потоку fp, інакше доступ до файлу буде закритий

       fp.Close();

       

       //Генерація й запис у файл випадкових чисел

       Random val = new Random(); // val - об'єкт класу Random

       for (int j=0; j < 10 ;j++)

       {

       //Next - метод генерує випадкові числа з діапазону 1-100

       x = val.Next(1, 100);

       //Запис у файл

       File.AppendAllText(path1,x.ToString()+"\n");

       }

       //Порядкове зчитування даних з файлу в масив

       string[] readVal = File.ReadAllLines(path1);

       

           foreach (string i in readVal)

           {

           Console.WriteLine(i);

           x = Int16.Parse(i);

           x = x * 2;

           Console.WriteLine(x);

           }

      }

     }

    }

Клас FileSystemInfo

Клас FileSystemInfo є предком для класів DirectoryInfo й FileInfo. Саме тому розглянемо цей клас раніше розгляду класів DirectoryInfo й FileInfo.

Клас FileSystemInfo містить ряд властивостей, які дозволяють одержати загальні характеристики файлу або папки - наприклад, час створення, різні атрибути (тільки для читання, схований і т.п.).

От найбільш важливі методи властивості й методи цього класу (всі ці властивості й методи застосовні як до файлів, так і до папок):

  •  Delete - метод для видалення.
  •  Refresh - метод для відновлення інформації про файл або папку (викликається, наприклад, перед одержанням атрибутів).
  •  CreationTime - читає або задає час створення.
  •  LastAccessTime - читає або задає час останнього доступу.
  •  LastWriteTime - читає або задає час останнього запису.
  •  Attributes - читає або задає атрибути (схований, стислий, системний, тимчасовий, тільки для читання й ін.). Один з атрибутів (а саме Directory) дозволяє з'ясувати, чи не є об'єкт папкою.
  •  FullName - читає повне ім'я (диск, папки, подпапки й т.д.).
  •  Name - ім'я файлу або папки.
  •  Extension - розширення.
  •  Exists - існування файлу або папки.

Приклади використання цих методів і властивостей иы розглянемо на наступних уроках для нащадків класу FileSystemInfo - тобто для класів DirectoryInfo й FileInfo.

Клас DirectoryInfo

Клас DirectoryInfo призначений для роботи з папками. Він дозволяє робити стандартні операції - переміщення, видалення, створення папок і подпапок й ін.. Крім того, методи цього класу дозволяють одержати всі підкаталоги й файли зазначеної папки. На відміну від класу Directory, методи класу DirectoryInfo - це методи екземпляра (тобто вони не статичні).

Приклад використання класу:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

           // Створення об'єкта.

           DirectoryInfo di = new DirectoryInfo("d:\\tmp\\tmp2");

           // Створюємо папку.

           di.Create();

           // Вивід інформації про папку.

           String s = "";

           s += "Full nane: " + di.FullName + "\n";

           s += "Root: " + di.Root + "\n";

           s += "Name: " + di.Name;

           Console.WriteLine(s);

           // Переміщення папки.

           di.MoveTo("d:\\tmp\\tmp3");

           // Створення подпапок.

           di.CreateSubdirectory("subdir1");

           di.CreateSubdirectory("subdir2");

           // Одержання імен всіх подпапок.

           DirectoryInfo[] ds = di.GetDirectories();

           foreach (DirectoryInfo d in ds)

           {

               Console.WriteLine(s);

           }

           // Видалення папки й всіх подпапок.

           di.Delete(true);

       }

   }

}

Зверніть увагу, що окремого методу для перейменування немає - для перейменування ми використаємо метод MoveTo, як параметр якого ми вказуємо нове ім'я.

Також зверніть увагу, що в методі Delete для видалення разом з папкою всіх її подпапок ми повинні вказати параметр true. Якщо ж ми вкажемо параметр false або нічого не вкажемо, то виникне відповідне виключення.

Перерахування FileAttributes

За допомогою перерахування FileAttributes задаються атрибути для файлів і папок. Найбільше часто вживані значення цього перерахування:

Directory - визначає,  чи не є об'єкт папка.

Hidden - визначає,  чи не є об'єкт (папка або файл) схованим.

ReadOnly - визначає,  чи не має файл атрибут "тільки для читання".

Normal - визначає, що для файлу не встановлені будь-які інші атрибути. Даний елемент перерахування не може комбінуватися з іншими елементами цього ж перерахування.

System - визначає,  чи не є файл системним.

Archive - визначає,  чи не є файл архівним.

Compressed - визначає,  чи не є файл стислим файлом.

Приклад використання:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

           // Створення об'єкта.

           DirectoryInfo di = new DirectoryInfo("d:\\tmp\\tmp2");

           // Створюємо папку.

           di.Create();

           // Вивід інформації про папку.

           String s = "";

           s += "Full nane: " + di.FullName + "\n";

           s += "Root: " + di.Root + "\n";

           s += "Name: " + di.Name;

           Console.WriteLine(s);

           // Переміщення папки.

           di.MoveTo("d:\\tmp\\tmp3");

           // Створення подпапок.

           di.CreateSubdirectory("subdir1");

           di.CreateSubdirectory("subdir2");

           // Одержання імен всіх подпапок.

           DirectoryInfo[] ds = di.GetDirectories();

           foreach (DirectoryInfo d in ds)

           {

               Console.WriteLine(s);

           }

           // Привласнюємо атрибут "Тільки для читання".

           di.Attributes |= FileAttributes.Hidden;

           // Одержуємо атриубты файлу.

           FileAttributes fi = di.Attributes;

           // З'ясовуємо, є чи в папки атрибут Hidden.

           if ((fi & FileAttributes.Hidden) == FileAttributes.Hidden)

           {

               Console.WriteLine("Hidden");

           }

           // З'ясовуємо, є чи в папки атрибут ReadOnly.

if ((fi & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)

{

               Console.WriteLine("ReadOnly");

           }

           

       }

   }

}

Зверніть увагу на те, як визначається присутність деякого атрибута:

if((fi & FileAttributes.Hidden) == FileAttributes.Hidden)...

Якщо напишемо:

...

if(fi == FileAttributes.Hidden) // Логічний помилка!

...

те фрагмент програми видасть правильний результат тільки тоді, коли атрибут Hidden буде в папки єдиним. А тому що звичайно атрибутів трохи, те треба використати перший варіант.

Клас FileInfo

Можна вважати, що клас FileInfo представляє із себе файл, що перебуває на жорсткому диску. За допомогою цього класу можна робити стандартні операції з файлом - перейменування, переміщення, видалення, створення й ін. Крім того, можна одержати значення характеристик файлу (час останнього доступу, розмір й ін.), а також атрибути файлу (схований, системний й ін.).

Приклад роботи із класом:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

           // Читаємо інформацію про файл.

           FileInfo fi = new FileInfo(@"d:\tmp\1.txt");

           // Виводимо інформацію про файл.

           // Повне ім'я.

           Console.WriteLine(fi.FullName);

           // Тільки ім'я файлу.

           Console.WriteLine(fi.Name);

           // Повний шлях без імені файлу.

           String fullPath = fi.DirectoryName;

           Console.WriteLine(fullPath);

           // Перейменовуємо файл (шляхом переміщення

           // у цю же папку під іншим ім'ям.)

           fi.MoveTo(fullPath + @"\qqq.txt");

           // Створюємо новий файл.

           fi = new FileInfo(@"d:\tmp\2.txt");

           FileStream fs = fi.Create();

           // Закриваємо потік, пов'язаний з файлом.

           fs.Close();

           // Показуємо час створення.

           Console.WriteLine("Creation {0}", fi.CreationTime);

           // Перевіряємо, чи існує файл.

           if (fi.Exists)

           {

             // Видаляємо файл.

            fi.Delete();

           }

       }

   }

}

Зверніть увагу на рядки:

       ...

       // Закриваємо потік, пов'язаний з файлом.

       fs.Close();

       ...

Якщо її не додати, то декількома рядками нижче ми не зможемо видалити файл. Справа в тому, що з файлом у результаті виклику методу Create зв'язується файловий потік, і файл уважається використовуваним додатком. Для звільнення файлу ми й повинні закрити цей файловий потік.

Клас Path

Клас Path призначений для роботи з файловими шляхами. Цей клас володіє рядом методів, які розглянемо на прикладі:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

           // Одержання використовуваного в операційній системі

           // роздільника для шляхів.

           char ch = Path.DirectorySeparatorChar;

           Console.WriteLine(ch);

           // Одержання всіх заборонених в імені шляху символів.

           char[] chs = Path.InvalidPathChars;

           foreach (char c in chs)

           {

               Console.Write(c + " ");

           }

           Console.WriteLine();

           //////////

           // Робота зі шляхами.

           //////////

           // Зміна розширення файлу.

           string s = Path.ChangeExtension(@"d:\tmp.txt", "ini");

           Console.WriteLine(s);

           // Одержання імені файлу.

           s = Path.GetFileName(@"d:\tmp.txt");

           Console.WriteLine(s);

           // Одержання розширення файлу (разом із крапкою).

           s = Path.GetExtension(@"d:\tmp.txt");

           Console.WriteLine(s);

           // Одержання імені файлу без розширення.

           s = Path.GetFileNameWithoutExtension(@"d:\tmp.txt");

           Console.WriteLine(s);

           //Одержання повного імені файлу по відносному.

           s = Directory.GetCurrentDirectory();

           Console.WriteLine(s);

           s = Path.GetFullPath(@"..\..\tmp.txt");

           Console.WriteLine(s);

           // Одержання імені тимчасового файлу (разом зі шляхом).

           s = Path.GetTempFileName();

           Console.WriteLine(s);

           // Одержання шляху до папки для тимчасових файлів.

           s = Path.GetTempPath();

           Console.WriteLine(s);

       }

   }

}

Результати роботи приклада представлені на мал.20.3.

Рис.20.3. Результати роботи приклада програми

Клас Path при роботі зі шляхами не вимагає, щоб такий шлях дійсно існував. Наприклад, у прикладі не мається на увазі, що файл в:\tmp.txt існує. Це, зокрема, означає, що метод ChangeExtension у реальності не міняє розширення у файлу - він просто створює рядок з іншим розширенням, що ви самі повинні використати для реального перейменування наприклад, через статичний метод Move класу File

Клас FileSystemWatcher

Клас FileSystemWatcher із простору імен System.IO призначений для відстеження змін у файловій системі. Зміни можна відслідковувати як на локальному комп'ютері, так і на вилученому.

Приклад використання класу.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

           

            // Будемо стежити за папкою "d:\tmp".

           FileSystemWatcher watcher = new FileSystemWatcher(@"d:\tmp");

           // Стежимо за зміною імені файлів.

           watcher.NotifyFilter = NotifyFilters.FileName;

           // Додаємо оброблювач для події перейменування файлу.

           watcher.Renamed += new RenamedEventHandler(OnRenamed);

           // Починаємо спостереження.

           watcher.EnableRaisingEvents = true;

           // Стежимо, поки користувач не нажав q.

           Console.WriteLine("Press 'q' to exit");

           while(Console.Read()!='q');

        }

       // Оброблювач для події перейменування файлу.

       private static void OnRenamed(object source, RenamedEventArgs e)

       {

           Console.WriteLine("{0} renamed to {1}", e.OldName, e.Name);

       }

       }

}

Послідовність дій наступна - спочатку вказуємо, за чим хочемо стежити (за якою папкою, за якими файлами й за якими подіями для цих файлів). Потім указуємо, що за метод буде виконуватися при настанні тієї або іншої події. Зрозуміло, цей метод повинен бути в нашій програмі.

У прикладі відслідковується перейменування для всіх файлів у папці "d:\tmp" (мал.20.4).

Рис.20.4. Результати роботи програми

Перерахування NotifyFilters

Перерахування NotifyFilters служить для завдання параметрів, по яких відбувається відстеження змін у файловій системі. Воно може приймати наступні значення:

  •  Size - зміна розміру файлу або папки
  •  CreationTime - зміна часу створення файлу або папки
  •  FileName - зміна імені файлу
  •  DirectoryName - зміна імені папки
  •  Attributes - зміна атрибутів файлу або папки
  •  LastAccess - зміна часу останнього доступу до файлу або папки
  •  LastWrite - зміна часу останнього запису у файл або папку
  •  Security - зміна в установках безпеки файлу або папки

Приклад використання:

   FileSystemWatcher w = new FileSystemWatcher();

   //Зміни в розмірі або в імені файлу.

   w.NotifyFilter = NotifyFilters.Size | NotifyFilters.FileName;

Перерахування WatcherChangeTypes

WatcherChangeTypes призначено для визначення, які зміни відслідковуються у файловій системі. Значення які може приймати перерахування:

  •  Changed - відслідковувати зміни в атрибутах файлу або папки (наприклад, розмір, час останнього запису й ін.)
  •  Created - створення файлу або папки
  •  Deleted - видалення файлу або папки
  •  Renamed - перейменування файлу або папки
  •  All - усе з перерахованих

Клас FileSystemWatcher

Приклад використання класу FileSystemWatcher. У даному прикладі відслідковують події перейменування, видалення, створення й зміни розміру файлу.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

           FileSystemWatcher watcher = new FileSystemWatcher(@"d:\tmp");

           // Стежимо за зміною імені й розміру файлів.

           watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.Size;

           // Додаємо оброблювачі для подій.

           watcher.Renamed += new RenamedEventHandler(OnRenamed);

           watcher.Deleted += new FileSystemEventHandler(OnChanged);

           watcher.Created += new FileSystemEventHandler(OnChanged);

           watcher.Changed += new FileSystemEventHandler(OnChanged);

           watcher.EnableRaisingEvents = true;

           Console.WriteLine("Press 'q' to exit");

           while (Console.Read() != 'q') ;

       }

       // Оброблювач для події перейменування файлу.

       private static void OnRenamed(object source, RenamedEventArgs e)

       {

           Console.WriteLine("{0} renamed to {1}", e.OldName, e.Name);

       }

       // Оброблювач для інші події файлу.

       private static void OnChanged(object source, FileSystemEventArgs e)

       {

           switch (e.ChangeType)

           {

               case WatcherChangeTypes.Deleted:

                   Console.WriteLine("{0} - deleted", e.Name);

                   break;

               case WatcherChangeTypes.Created:

                   Console.WriteLine("{0} - created", e.Name);

                   break;

               case WatcherChangeTypes.Changed:

                   Console.WriteLine("{0} - changed", e.Name);

                   break;

           }

       }

   }

}

Для оброблювача події Changed установлений фільтр:

...

watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.Size;

...

Т. е., наприклад, не відслідковуємо в даному прикладі час останнього доступу до файлу або зміни атрибутів файлу.

Також зверніть увагу, що використається один оброблювач для 3-х подій - Deleted, Created й Changed.

Рис.20.5. Результати роботи програми

Клас Convert

Клас Convert служить для конвертиции різних типів друг у друга. Наприклад, можна конвертувати строкове подання числа або булевского значення в саме число або булевское значення:

           string s = "1234";

           int a = Convert.ToInt32(s);

           bool b = Convert.ToBoolean("true");

У змінні a й b запишуться число 1234 і значення true відповідно.

Часте форматування деякого об'єкта залежить від регіональних настроювань. Наприклад, у США в датах пишуть спочатку місяць, а потім число, а в Україні - навпаки. У цьому випадку ми використаємо метод ChangeType класу Convert, що приймає в якості одного з параметрів форматтер для конкретного регіону (культури).

Приклад:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace temp11

{

   class Program

   {

       static void Main(string[] args)

       {

IFormatProvider formatRu = new System.Globalization.CultureInfo("ru-RU", true);

IFormatProvider formatUS = new System.Globalization.CultureInfo("en-US", true);

DateTime f = (DateTime)Convert.ChangeType("11/12/2007", typeof(DateTime), formatRu);

Console.WriteLine("Формат Росії - " + f);

f = (DateTime)Convert.ChangeType("11/12/2007", typeof(DateTime), formatUS);

Console.WriteLine("Формат USA - " + f);

       }

   }

}

Після першого виклику в змінну f запишеться 11 грудня, а після другого - 12 листопада.

Рис.20.6. Результати роботи програми

Завдання.

Сформувати динамічний масив А складається з N елементів (кількість елементів уводиться із клавіатури). Елементи масиву А являють собою цілі випадкові числа з діапазону 1...N. Записати масив у файл (ім'я файлу вводиться із клавіатури) у папку Mas у папці проекту.

З елементів , що зберігаються, у файлі сформувати двовимірний масив В, що складається із двох рядків й стовпців. Елементи першого рядка масиву В дорівнюють елементам масиву А с парними індексами, другий - з непарними. Вивести результати у файл із новим ім'ям у вигляді 2 рядків.

З масиву В сформувати масив символів З, у якому значення елементів другого рядка відповідають кодам символів. В отриманому масиві перетворити рядкові символи в прописні й навпаки. Результати вихідного масиву С и трансформованого зберегти в новому файлі. Прочитати з файлу значення елементів трансформованого й вихідного масивів і вивести результати на екран.

Вивести на екран імена створених файлів і час їхнього створення. Останній створений файл перейменувати.


 

А также другие работы, которые могут Вас заинтересовать

16020. Охоронний апарат Української Держави квітень – грудень 1918 2.92 MB
  Незважаючи на кризовий соціально-економічний, політичний і правовий стан країни на момент приходу П. Скоропадського до влади, голові Української Держави та його урядовому оточенню вдалося розробити державну охоронну концепцію та здійснити низку заходів з її нормативно-організаційного забезпечення. Проте за умов поширеного правового нігілізму, анархічних наслідків російської революції у П. Скоропадського не було історичних шансів виводу держави з кризової ситуації, наведення порядку в країні...
16022. Международное право. Учебник 2.27 MB
  МВД Украины Университет внутренних дел Л.Д.ТИМЧЕНКО МЕЖДУНАРОДНОЕ ПРАВО Рекомендовано ГУРЛС МВД Украины в качестве учебника для юридических специальностей вузов МВД ХАРЬКОВ Консум 1999 Светлой помят своего Учител Михаила Владимировича Яновског посвяще...
16023. Иностранное право в судебной практике 862.5 KB
  ИНОСТРАННОЕ ПРАВО В СУДЕБНОЙ ПРАКТИКЕ Ю.А. Тимохов Волтерс Клувер 2004 Оглавление КОММЕНТАРИЙ Предисловие Глава I. ПРИМЕНЕНИЕ СУДАМИ ИНОСТРАННОГО ПРАВА 1. Российское законодательство об иностранном праве 2. Применение иностранного права в случае предусм
16024. Уголовно-исполнительная система России цифры факты и события 1.21 MB
  В.Г.Тимофеев Уголовноисполнительная система России: цифры факты и события Министерство образования Российской Федерации Чувашский государственный университет им. И. Н. Ульянова Тимофеев В. Г. Уголовноисполнительная система России: цифры факты и с
16025. История законодательства о праве поземельной собственности в России с IX по начало XX века 579 KB
  Тесля А. А. История законодательства о праве поземельной собственности в России с IX по начало XX века. Учебное пособие. 2004. Тесля Андрей Александрович преподаватель кафедры Правоведение Дальневосточного государственного университета путей сообщения. Данн
16026. Взаимодействие следователя с иными подразделениями органов внутренних дел при расследовании преступлений 316.5 KB
  Тертышник B.M. Слинько С.В. Взаимодействие следователя с иными подразделениями органов внутренних дел при расследовании преступлений. Харьков: Унт внутр. дел. 1995 . 66 с. ВВЕДЕНИЕ все действия следователя должны быть направлены к достижению цели следствия состоящей в т...
16027. Юридические основания к суждению о силе доказательств и мысли из речей Председательствующего по уголовным делам 958.5 KB
  Терновский Н.А. Юридические основания к суждению о силе доказательств и мысли из речей Председательствующего по уголовным делам Пособие для юристовпрактиков и присяжных заседателей. Тула Типография В.Н. Соколова 1901 г. Юридические основания к суждению о силе доказа...
16028. Ответственность за соучастие в преступлении 1000 KB
  п.ф.тельнов. ответственность за соучастие в преступлении. москва 1974 г. Глава 1. ПОНЯТИЕ И ПРИЗНАКИ СОУЧАСТИЯ 1. ПОНЯТИЕ И ЗНАЧЕНИЕ СОУЧАСТИЯ В советском уголовном праве определение соучастия впервые было дано Руководящими началами в ст. 21 которых говори