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 рядків.

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

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


 

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

33182. Взаимосвязь выручки, расходов и прибыли от реализации продукции. Показатели анализа безубыточности 41.86 KB
  61 Для прогнозирования максимально возможной прибыли в плановом году целесообразно сопоставить выручку от реализации продукции с общей суммой затрат подразделяемых на переменные постоянные и смешанные. Разность между фактическим количеством реализованной продукции и безубыточным объемом продаж продукции это зона безопасности прибыли и чем она больше тем стабильнее финансовое состояние предприятия. График позволяет установить при каком объеме реализации продукции предприятие получит...
33183. Понятие и расчет показателей рентабельности 273.64 KB
  62 РЕНТАБЕЛЬНОСТЬ это показатель характеризующий степень прибыльности или убыточности производства фирмы в целом или отдельных видов продукции. Расчет показателей рентабельности: Общая рентабельность определяется как отношение прибыли до налогообложения к выручке от реализации продукции. Рентабельность собственного капитала определяется как отношение чистой прибыли к величине собственного капитала организации.Формула расчета:где ЧПУОП чистая прибыль убыток отчетного периода;СК0 собственный капитал на начало года;СК1 ...
33184. Расчет порога рентабельности, запаса финансовой прочности, производственный леверидж 22.1 KB
  Рн объем реализации в натуральном выражении. ПРд порог рентабельности в денежном выражении. ПРн порог рентабельности в натуральном выражении. Формула расчета порога рентабельности в денежном выражении: ПРд = ВЗпост В Зпер Формула расчета порога рентабельности в натуральном выражении в штуках продукции или товара: ПРн = Зпост Ц ЗСпер Насколько далеко предприятие от точки безубыточности показывает запас финансовой прочности.
33185. Экономическое содержание оборотного капитала. Структура оборотных активов организации и источники их финансирования 16.37 KB
  Иными словами это средства фирмы вложенные в текущие активы оборотные средства. Оборотные средства это денежные средства авансируемые для образования оборотных производственных фондов и фондов обращения с целью обеспечения непрерывного процесса производства и реализации продукции. В состав оборотных средств входят: запасы товарноматериальных ценностей дебиторская задолженность средства в расчетах денежные средства. Кроме разделения по составу оборотные средства можно классифицировать: по месту и роли в процессе воспроизводства...
33186. Определение потребности в оборотном капитале организации и эффективность его использования 21.76 KB
  66 Эффективное использование оборотных средств во многом зависит от правильного определения потребности в них. Это обусловливает необходимость формирования оборотных средств в определенном размере. Выяснение потребности организации в финансовых ресурсах для создания конкретных видов запасов осуществляется посредством нормирования оборотных средств. Нормирование оборотных средств осуществляется на каждом предприятии в строгом соответствии со сметами затрат на производство и непроизводственные нужды и бизнеспланом отражающим все стороны...
33187. Сущность, содержание, принципы, предмет и метод бухгалтерского учета 17.45 KB
  67 Бухгалтерский учет представляет собой упорядоченную систему сбора регистрации и обобщения информации в денежном выражении об имуществе обязательствах организаций и их движении путем сплошного непрерывного и документального учета всех хозяйственных операций. Принципы бухгалтерского учета используемые в российской учетной практике: 1 бухгалтерский учет имущества обязательств и хозяйственных операций осуществляется способом двойной записи в соответствии с Планом счетов бухгалтерского учета финансовохозяйственной деятельности...
33188. Сущность аудита и его задачи. Постулаты аудита. Классификация видов аудита 15.83 KB
  Постулаты аудита. Классификация видов аудита.68 Аудит предпринимательская деятельность аудиторов аудиторских организаций по осуществлению независимых проверок бухгалтерской отчетности платежнорасчетной документации налоговых декларации и других финансовых обязательств и требований экономических субъектов с целью установления достоверности их бухгалтерской отчетности и соответствия совершенных ими финансовых и хозяйственных операций нормативным актам действующим в Российской Федерации.
33189. Финансовая аренда (лизинг). Виды лизинга. Преимущества лизинга. Схемы расчета лизинговых платежей 15.32 KB
  Финансовый лизинг характеризуется длительным сроком контракта от 5 до 10 лет и амортизацией всей или большей части стоимости оборудования. Возвратный лизинг заключается в продаже собственником промышленным предприятием оборудования лизинговой компании с одновременным заключением договора лизинга на это оборудование в качестве пользователя. В результате первоначальный собственник получает от лизинговой компании полную стоимость оборудования сохраняет за собой право владения и периодически платит за пользование оборудованием. Лизинг это...
33190. Понятие инвестиционного портфеля. Типы портфеля, принципы и этапы формирования, стратегия управления 14.84 KB
  90 Инвестиционный портфель совокупность ценных бумаг приобретенных инвесторами. Существует три типа портфеля ценных бумаг: рискованный портфель консервативный портфель и комбинированный портфель. Рискованный портфель формируется из рискованных ценных бумаг доля которых в портфеле составляет 70. Комбинированный портфель формируется из надежных ценных бумаг приобретаемых на отностительно большой период времени и из рискованных с повышенным доходом состав которых все время обновляется.