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

50

Как упоминалось ранее, перемещение и удаление файлов или папок в классах 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);
            }
        }
Программа для манипулирования файлами
Пройди тесты
Лучший чат для C# программистов