Перемещение, копирование и удаление файлов

--- Многопоточность и файлы --- Перемещение, копирование и удаление файлов

Как упоминалось ранее, перемещение и удаление файлов или папок в классах FileInfo и DirectoryInfo обеспечивают методы MoveTo() и Delete(). В классах File и Directory доступны аналогичные методы Move() и Delete(). Вдобавок классы FileInfo и File поддерживают, соответственно, методы СоруТо() и Сору(). Однако для копирования папок целиком методов не предусмотрено. Папку можно копировать только за счет копирования каждого содержащегося в ней файла.

Использовать все эти методы довольно просто; детальные описания способов работы с ними можно найти в документации SDK. В настоящей статье их применение иллюстрируется на примере вызова статических методов Move(), Сору() и Delete() класса File. Для этого будет взято за основу предыдущее приложение FileProperties и создана его измененная версия. При отображении свойств файла появится возможность удаления, перемещения и копирования файла в какое-то другое место.

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

... Новое расположение

Private void buttonMove_Click(object sender, RoutedEventArgs e) { try { string filePath = Path.Combine(currentFolderPath, textBoxFileName.Text); string query = "Действительно переместить файл \n" + filePath + " ?"; if (MessageBox.Show(query, "Переместить файл?", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { File.Move(filePath, textBoxNewPath.Text); DisplayFolderList(currentFolderPath); } } catch (Exception ex) { MessageBox.Show("Не удается переместить файл из-за исключения: " + ex.Message); } } private void buttonCopy_Click(object sender, RoutedEventArgs e) { try { string filePath = Path.Combine(currentFolderPath, textBoxFileName.Text); File.Copy(filePath, textBoxNewPath.Text); DisplayFolderList(currentFolderPath); } catch (Exception ex) { MessageBox.Show("Не удается скопировать файл из-за исключения: " + ex.Message); } } private void buttonDelete_Click(object sender, RoutedEventArgs e) { try { string filePath = Path.Combine(currentFolderPath, textBoxFileName.Text); string query = "Действительно удалить файл \n" + filePath + " ?"; if (MessageBox.Show(query, "Удалить файл?", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { File.Delete(filePath); DisplayFolderList(currentFolderPath); } } catch (Exception ex) { MessageBox.Show("Не удается удалить файл из-за исключения: " + ex.Message); } }

Чтение и запись данных в файл

Операции чтения и записи данных в файлы в принципе очень просты, однако выполняются они не через объекты DirectoryInfo и FileInfo. В.NET Framework 4 это делается через объект File. Позже будет показано, как их выполнять с помощью других классов, представляющих обобщенную концепцию потока (stream).

До появления.NET Framework 2.0 вокруг того, как следует производить чтение и запись данных в файлы, велось много споров. Классы из.NET Framework можно было использовать, но такой подход не был простым. В версии.NET Framework 2.0 класс File был расширен; с его помощью стало возможным выполнение операций чтения и записи данных в файлы с помощью всего одной строки кода. То же самое доступно и в.NET Framework 4.

Чтение из файла

Рассмотрим пример чтения файла, создав приложение WPF, которое содержит обычное текстовое поле, кнопку и многострочное текстовое поле. В конечном итоге должна получиться форма, подобная показанной ниже. Используйте следующую разметку:

Введите путь к файлу

Using System; using System.IO; using System.Windows; using System.Windows.Controls; namespace FileRead { ///

/// Логика взаимодействия для MainWindow.xaml /// public partial class MainWindow: Window { public MainWindow() { InitializeComponent(); } private void buttonRead_Click(object sender, RoutedEventArgs e) { txbTextFile.Text = File.ReadAllText(txb.Text); } } }

При построении данного приложения первым шагом является добавление оператора using для включения пространства имен System.IO. После этого с помощью события buttonRead_Click кнопки Прочитать многострочное текстовое поле заполняется содержимым файла. Затем к содержимому файла можно получать доступ методом File.ReadAllText(). Как не трудно заметить, чтение файла осуществляется с помощью единственного оператора.

Метод ReadAllText() открывает указанный файл, считывает его содержимое и затем закрывает его. Возвращаемое значение метода ReadAllText() представляет собой строку, в которой хранится все содержимое указанного файла. Результат может выглядеть примерно так, как показано на рисунке:

Для открытия файлов и работы с ними предназначены также методы ReadAllBytes и ReadAllLines. Метод ReadAllBytes позволяет открывать двоичные файлы и считывать их содержимое в байтовый массив. Упомянутый выше метод ReadAllText возвращает все содержимое файла в виде одной строки. Такое поведение не всегда подходит. Вместо этого может требоваться работать с содержимым файла в построчной манере, т.е. строка за строкой. Для этого служит метод ReadAllLines, который возвращает массив строк с содержимым файла.

Запись в файл

Помимо чтения, библиотека базовых классов (Base Class Library - BCL) в.NET Framework существенно упрощает также и запись данных в файлы. Вдобавок к методам для чтения файлов ReadAllText(), ReadAllLines() и ReadAllBytes() , в ней предлагаются методы, предназначенные для записи данных в файлы - WriteAllText() , WriteAllBytes() иWriteAllLines().

Рассмотрим пример, основанный на том же проекте WPF, но на этот раз многострочное текстовое поле будет использоваться для ввода данных в файл. Код обработчика событий buttonRead_Click теперь должен выглядеть следующим образом:

Private void buttonRead_Click(object sender, RoutedEventArgs e) { File.WriteAllText(txb.Text, txbTextFile.Text); }

Скомпонуйте и запустите приложение. Введите в первом текстовом поле значение С:\Testing.txt, а во втором - какой-нибудь текст, после чего щелкните на кнопке. Внешне ничего не произойдет, однако, если заглянуть после этого в корневой каталог на диске С:, то можно будет обнаружить там файл Testing.txt с содержимым, которое было введено во втором текстовом поле.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: