Перемещение, копирование и удаление файлов
50C# и .NET --- Многопоточность и файлы --- Перемещение, копирование и удаление файлов
Как упоминалось ранее, перемещение и удаление файлов или папок в классах FileInfo и DirectoryInfo обеспечивают методы MoveTo() и Delete(). В классах File и Directory доступны аналогичные методы Move() и Delete(). Вдобавок классы FileInfo и File поддерживают, соответственно, методы СоруТо() и Сору(). Однако для копирования папок целиком методов не предусмотрено. Папку можно копировать только за счет копирования каждого содержащегося в ней файла.
Использовать все эти методы довольно просто; детальные описания способов работы с ними можно найти в документации SDK. В настоящей статье их применение иллюстрируется на примере вызова статических методов Move(), Сору() и Delete() класса File. Для этого будет взято за основу предыдущее приложение FileProperties и создана его измененная версия. При отображении свойств файла появится возможность удаления, перемещения и копирования файла в какое-то другое место.
Добавьте следующую разметку к коду предыдущего примера:
...
<GroupBox Header="Переместить, удалить или копировать файл">
<StackPanel>
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Padding" Value="3"></Setter>
<Setter Property="Margin" Value="0,5,5,5"></Setter>
</Style>
</StackPanel.Resources>
<Button x:Name="buttonMove" Click="buttonMove_Click">Переместить</Button>
<Button x:Name="buttonCopy" Click="buttonCopy_Click">Копировать</Button>
<Button x:Name="buttonDelete" Click="buttonDelete_Click">Удалить</Button>
</StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Margin="0,5,5,5" VerticalAlignment="Center">Новое расположение</TextBlock>
<TextBox Grid.Column="1" Height="{Binding ElementName=textBoxInput, Path=ActualHeight}"
VerticalContentAlignment="Center" FontSize="12" x:Name="textBoxNewPath"></TextBox>
</Grid>
</StackPanel>
</GroupBox>
...
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);
}
}