Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_собственные.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
701.16 Кб
Скачать

7. Получение сведений о файле; копирование файлов; перечисление файлов в папке; изменение расширения файлов.

Под файлом подразумевается именованная информация на внешнем носителе, например, на жестком диске.

Для указания полного пути к файлу удобно использовать Дословные литералы или Дословное применение. Эти литералы предваряются символом @, который отключает обработку управляющих последовательностей (например, \n) и позволяет получать строки в таком виде, в котором они записаны. В дословных литералах не требуется дублировать обратную косую черту.

Вот два варианта записи одного и того же пути:

“C:\\app\\bin\\a.exe”

@“C:\app\bin\a.exe”

Чтобы получить доступ к текущему каталогу приложения можно использовать обозначение: “.”

Примеры:

1) Привязка к текущему каталогу приложения:

DirectoyInfo dir1=new DirectoyInfo(“.”);

2) Привязка к каталогу C:\Windows с помощью дословного литерала:

DirectoyInfo dir2=new DirectoyInfo(@”C:\Windows” );

3) Привязка к несуществующему каталогу с последущим его созданием:

DirectoyInfo dir3=new DirectoyInfo(@”F:\СТП\ЛР” );

dir3.Create();

5.3. Изменение расширения файлов

Для управления путями файловой системы имеется статический класс Path. Он позволяет запрашивать и разбирать пути файловой системы.

Некоторые статические методы класса Path:

Методы класса

Описание

ChangeExtension()

Принимает в качестве параметра путь и возвращает путь к файлу с другим расширением. Внимание! Изменяется только строка пути, расширение настоящего файла не изменяется.

GetExtension()

Возвращает расширение файла, соответствующего заданному пути.

GetFileName()

Возвращает имя файла, соответствующего заданному пути.

GetFullPath()

Возвращает полный путь, соответствующий заданному пути.

GetPathRoot()

Возвращает корневой каталог из заданного пути.

8. Основы организации потоков. Потоки и многозадачность. Пространство имен System.Threading. Класс Thread. Создание потока.

Cреди множества новых средств С# самым значительным, пожалуй, является встроенная поддержка многопоточного программирования (multithreaded programming) и асинхронного программирования. Приложение .NET состоит из одного или нескольких процессов. Процессу принадлежит выделенная для него область памяти и ресурсы, такие как внешние библиотеки программного кода, первичный поток. Каждый процесс может состоять из нескольких доменов (частей) приложения, ресурсы которых изолированы друг от друга. Домен приложения представляет собой обособленный логический раздел процесса, куда помещается выполняемый файл .NET (.exe). В рамках домена может быть запущено несколько потоков выполнения. Поток (thread) — это управляемая единица выполняемого кода. Иногда этот термин переводится буквально – «нить», чтобы отличить его от потоков ввода/вывода. Все процессы имеют, по крайней мере, один поток управления, который обычно называется основным (main thread) или первичным, поскольку именно с этого потока начинается выполнение программы. Из основного можно создать и другие потоки. Управление потоками осуществляет операционная система.

Таким образом, многопоточность представляет собой специальную форму многозадачности. Многопоточное программирование опирается на сочетание средств, предусмотренных языком С#, и классов, определенных в среде .NET Framework, т.е. поддержка многопоточности встроена в язык. В многозадачной среде, ориентированной на потоки, все процессы имеют, по крайней мере, один поток, но возможно и большее их количество. Это означает, что одна программа может выполнять сразу две и более задач. Например, текстовый редактор может форматировать текст и в то же время выводить что-либо на печать, поскольку эти два действия выполняются двумя отдельными потоками.

Преимущество многопоточности состоит в том, что она позволяет разрабатывать очень эффективные программы, поскольку предоставляет возможность с толком использовать вынужденное время ожидания (простоя), которое имеет место во многих программах. Общеизвестно, что большинство устройств ввода-вывода (сетевые порты, дисководы или клавиатура) работают гораздо медленнее, чем центральный процессор (ЦП). Поэтому в программах львиная доля времени выполнения зачастую тратится на ожидание окончания отправки информации устройству (или получения от него). Используя многопоточность, можно построить программу так, чтобы она в такие периоды ожидания выполняла другую задачу. Например, пока одна часть программы будет отправлять файл по электронной почте, другая ее часть может считывать входные данные с клавиатуры, а еще одна — буферизировать следующий блок данных для отправки в Internet.

Поток может находиться в одном из нескольких возможных состояний. Он может выполняться. Он может быть готовым к выполнению (как только получит время ЦП).

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

В среде .NET Framework определено два типа потоков: высокоприоритетный (foreground) и низкоприоритетный, или фоновый (background). По умолчанию поток создается высокоприоритетным, но его тип можно изменить, т.е. сделать его фоновым. Единственное различие между высоко- и низкоприоритетным потоками состоит в том, что последний будет автоматически завершен, если все высокоприоритетные потоки в его процессе остановились.

Существуют также и недостатки многопоточного программирования:

– большое количество потоков ведет к увеличению накладных расходов, связанных с их переключением, что снижает общую производительность системы;

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

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

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