Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kompyuternye_tekhnologii_C.doc
Скачиваний:
8
Добавлен:
01.02.2015
Размер:
368.64 Кб
Скачать

9.Функции и процедуры

Процедура – это подпрограмма, которая может вызываться в коде основной программы и производить какие либо действия с переданными в нее переменными.

Функция – это такая же процедура, только ей свойственно явное возвращение результат ее работы.

Чтобы стало ясно, приведу пример:

static void CopyString(string a, ref string b)

{

b = a+b;

}

static string ReturnString(string a, string b)

{

return a + b;

}

Из анализа приведенного кода видно, что процедура CopyString – не возвращает значений с помощью слова return, те на прямую. Она возвращает значения через ref – указатель(используют в процедуре чтоб возвратить значение не явно).

ref можно применять как в функциях так и в процедурах и не один раз. Например:

static string ReturnString(string a, string b,ref string c)

{

c=a+b+” Test”;

return a + b;

}

Что будет если мы засунем переменные a,b,c в функцию?! Например

a=Hello b=Artem e = ReturnString(a,b,c);

Результат:

e = HelloArtem c = HelloArtem Test

Как определить что перед вами процедура или функция и как вообще их писать?!

Запомните процедура всегда начинается со слова void, а функция с названия класса или типа, который она возвращает. Напрмер string в нашем случае.

Пишется процеру просто:

<модификатор доступа> <тип> <название> (параметры) { Тело функции Return <тип>; }

Функция аналогично:

<модификатор доступа> <тип> <название> (параметры) { Тело функции Return <тип>; }

<модификатор доступа>: позволяет видеть или скрывать процедуры для их вызова, может быть: public private. Так же существуют можификатор static.

10.Метод Main()

Метод Main может возвращать значение void:

static void Main()

{

//...

}

Он также может возвращать значение типа int:

static int Main()

{

//...

return 0;

}

Если значение, возвращаемое методом Main, не используется, то указание в качестве возвращаемого типа void несколько упрощает код. Однако возврат целого значения позволяет программе передавать информацию о своем состоянии другим программам и скриптам, которые вызывают исполняемый файл. В следующем примере показано, как получить доступ к значению, возвращаемому методом Main.

В этом примере с помощью пакетного файла запускается программа, после чего проверяется значение, возвращаемое функцией Main. При запуске программы в Windows значение, возвращаемое функцией Main, сохраняется в переменной среды, которая называется ERRORLEVEL. Пакетный файл может определить результат выполнения посредством проверки значения переменной ERRORLEVEL. В большинстве случаев на успешное выполнение указывает нулевое значение. В следующем примере показана простая программа, в которой функция Main возвращает ноль. Нулевое значение указывает на успешное выполнение программы. Сохраните программу в файле MainReturnValTest.cs.

// Сохраняет эту программу в MainReturnValTest.cs.

class MainReturnValTest

{

static int Main()

{

//...

return 0;

}

}

11.Работа с файлы

Любой ввод и вывод информации в .Net Framework включает в себя использование потоков.

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

В пространстве имен System.IO хранятся классы, предназначенные для считывания и записи данных в файлы. Классы:

File– содержит статические методы для манипуляции файлами (создание, копирование, удаление);Directory–  содержит статические методы для манипуляции директориями;

Path– статических класс, «путь»;FileInfo– не обладает статическими методами, соответствует физическому фалу, во многом дублирует функциональность File;

FileStream– представляет поток, указывающий на файл или местоположение в сети. Представляет файл для считывания/записи, оперирует байтами и массивом байтов, в то время как Stream оперирует символьными данными.

Скачивание файла из интернета

Для загрузки файлов из интернета можно воспользоваться классом WebClient из пространства имен System.Net. За скачивание файла отвечает его метод DownloadFile (string url, string filePath), где url — URL скачаиваемого файла, а filePath — путь для сохранения файла на диске. Осторожно! В случае если ресурс недоступен, метод вызывает WebException.

System.Net.WebClient webClient = new System.Net.WebClient();

string url = @"http://microsoft.com/";

webClient.DownloadFile(url, filePath);

Исполнение файла Для запуска файла на выполнение используется метод Start класса Process из пространства имен System.Diagnostics. В качестве первого параметра ему передается строка с именем файла для запуска, а в качестве второго — параметры запуска.

System.Diagnostics.Process.Start("iexplore", filePath);

Чтение файла Для чтения файлов используется класс StreamReader из пространства имен System.IO. В конструктор класса передается строка, содержащая путь к считываемому файлу. Его метод ReadLine () возвращет следующую строку из считываемого файла. Чтобы полностью прочитать файл можно вызвать метод ReadToEnd ().

StreamReader reader = new StreamReader(filePath);

//string fileContents = reader.ReadToEnd();

//Console.WriteLine(fileContents);

string str = "";

while ((str = reader.ReadLine()) != null)

{

Console.WriteLine(str);

}

reader.Close(); // Закрываем файл

Удаление файла

Удалить файл можно посредством метода Delete () класса FileInfo из пространства имен System.IO.

System.IO.FileInfo file = new System.IO.FileInfo(filePath);

file.Delete();

Листинг файлов

Для просмотра списка файлов того или иного типа в определенной папке диска используется метод метод GetFiles класса Directory из того-же пространства имен System.IO. В метод можно передать 3 параметра:

  • Путь к интересующей папке;

  • Фильтр файлов (например *.htm для htm-файлов);

  • Тип поиска, определяющий, искать-ли файлы в подпапках.

Выходными данными метода является переменная string[], содержащая список файлов:

string[] dirs = System.IO.Directory.GetFiles(@"c:\", "*.htm", SearchOption.TopDirectoryOnly);

Console.WriteLine("Всего htm-файлов {0}.", dirs.Length);

foreach (string dir in dirs)

{

Console.WriteLine(dir);

}

Наблюдение за файловой системой

И напоследок механизм наблюдения за файловой системой. Наблюдателем файловой системы в C# является класс FileSystemWatcher из System.IO. Создадим нового наблюдателя:

FileSystemWatcher watcher = new FileSystemWatcher(); // Создаем наблюдателя ФС

Далее определяем рабочий каталог, наблюдаемые события (создание файлов, изменение, удаление) и тип файлов, за которыми следует наблюдать:

watcher.Path = @"C:\"; // Рабочий каталог

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; // Определяем события, которые будем отслеживать

watcher.Filter = "*.htm"; // Устанавливаем фильтр для отслеживаемых файлов

Теперь привязываем обработчики событий и запускаем наблюдателя:

watcher.Changed += new FileSystemEventHandler(OnChanged); // Изменен

watcher.Created += new FileSystemEventHandler(OnChanged); // Создан

watcher.Deleted += new FileSystemEventHandler(OnChanged); // Удален

watcher.Renamed += new RenamedEventHandler(OnRenamed); // Переименован

watcher.EnableRaisingEvents = true; // Включаем наблюдение

А вот и сами обработчики событий:

{

Console.WriteLine(e.FullPath + " " + e.ChangeType); // Событие, вызываемое если файл изменен создан или удален

}

private static void OnRenamed(object source, RenamedEventArgs e)

{

Console.WriteLine("{0} переименован в {1}", e.OldFullPath, e.FullPath); // Событие, вызываемое при переименовании файла

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]