Перейти к содержимому

C как скопировать файл в другую папку

  • автор:

C как скопировать файл в другую папку

Подобно паре Directory/DirectoryInfo для работы с файлами предназначена пара классов File и FileInfo . С их помощью мы можем создавать, удалять, перемещать файлы, получать их свойства и многое другое.

FileInfo

Некоторые полезные методы и свойства класса FileInfo :

CopyTo(path) : копирует файл в новое место по указанному пути path

Create() : создает файл

Delete() : удаляет файл

MoveTo(destFileName) : перемещает файл в новое место

Свойство Directory : получает родительский каталог в виде объекта DirectoryInfo

Свойство DirectoryName : получает полный путь к родительскому каталогу

Свойство Exists : указывает, существует ли файл

Свойство Length : получает размер файла

Свойство Extension : получает расширение файла

Свойство Name : получает имя файла

Свойство FullName : получает полное имя файла

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

Класс File реализует похожую функциональность с помощью статических методов:

Copy() : копирует файл в новое место

Create() : создает файл

Delete() : удаляет файл

Move : перемещает файл в новое место

Exists(file) : определяет, существует ли файл

Пути к файлам

Для работы с файлами можно применять как абсолютные, так и относительные пути:

Получение информации о файле

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

Перемещение файла

Если файл по новому пути уже существует, то с помощью дополнительного параметра можно указать, надо ли перезаписать файл (при значении true файл перезаписывается)

Копирование файла

Метод CopyTo класса FileInfo принимает два параметра: путь, по которому файл будет копироваться, и булевое значение, которое указывает, надо ли при копировании перезаписывать файл (если true , как в случае выше, файл при копировании перезаписывается). Если же в качестве последнего параметра передать значение false , то если такой файл уже существует, приложение выдаст ошибку.

Метод Copy класса File принимает три параметра: путь к исходному файлу, путь, по которому файл будет копироваться, и булевое значение, указывающее, будет ли файл перезаписываться.

Чтение и запись файлов

В дополнение к вышерассмотренным методам класс File также предоставляет ряд методов для чтения-записи текстовых и бинарных файлов:

AppendAllLines(String, IEnumerable<String>) / AppendAllLinesAsync(String, IEnumerable<String>, CancellationToken)

добавляют в файл набор строк. Если файл не существует, то он создается

AppendAllText(String, String) / AppendAllTextAsync(String, String, CancellationToken)

добавляют в файл строку. Если файл не существует, то он создается

byte[] ReadAllBytes (string path) / Task<byte[]> ReadAllBytesAsync (string path, CancellationToken cancellationToken)

считывают содержимое бинарного файла в массив байтов

string[] ReadAllLines (string path) / Task<string[]> ReadAllLinesAsync (string path, CancellationToken cancellationToken)

считывают содержимое текстового файла в массив строк

string ReadAllText (string path) / Task<string> ReadAllTextAsync (string path, CancellationToken cancellationToken)

считывают содержимое текстового файла в строку

IEnumerable<string> ReadLines (string path)

считывают содержимое текстового файла в коллекцию строк

void WriteAllBytes (string path, byte[] bytes) / Task WriteAllBytesAsync (string path, byte[] bytes, CancellationToken cancellationToken)

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

void WriteAllLines (string path, string[] contents) / Task WriteAllLinesAsync (string path, IEnumerable<string> contents, CancellationToken cancellationToken)

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

WriteAllText (string path, string? contents) / Task WriteAllTextAsync (string path, string? contents, CancellationToken cancellationToken)

записывают строку в текстовый файл. Если файл не существует, он создается. Если существует, то перезаписывается

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

Например, запишем и считаем обратно в строку текстовый файл:

Стоит отметить, что при добавлении текста я добавил в строку последовательность «\n», которая выполняет перевод на следующую строку. Благодаря этому добавляемый текст располагается в файле на новой строке.

Если мы хотим, что в файле изначально шло добавление на новую строку, то для записи стоит использовать метод WriteAllLines/ WriteAllLinesAsync , а для добавления — AppendAllLines / AppendAllLinesAsync

Аналогично при чтении файла если мы хотим каждую строку файла считать отдельно, то вместо ReadAllText / ReadAllTextAsync применяется ReadAllLines / ReadAllLinesAsync .

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

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

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

Работа с файловой системой в C#. Работа с файлами (классы File и FileInfo)

Аналогично тому, как организована работа с каталогами в C#, для работы с файлами в пространстве имен System.IO предусмотрено два класса для работы с файлами — File и FileInfo . Рассмотрим как можно использовать эти классы при работе с файловой системой в C#. Однако, прежде, чем мы приступим к рассмотрению функциональности новых классов, необходимо рассмотреть вопрос о том, как получить список файлов в определенном каталоге.

DirectoryInfo (продолжение)

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

В этом случае программа выдаст нам список всех файлов находящихся в определенном каталоге. В приведенном выше примере вывод консоли будет примерно следующим:

То есть, при использовании метода GetFiles() без параметров просматривается только конкретный каталог. У метода GetFiles() имеется ряд переопределенных версий, позволяющих организовать поиск вглубь для того, чтобы вывести список файлов, находящихся не только в конкретном каталоге, но и во всех поддиректориях. Например, просмотрим все файлы в каталоге C:\Program Files (x86)

Здесь мы воспользовались переопределенной версией метода GetFiles() у которого первый параметр представляет собой маску по которой будут искаться файлы (например, мы могли бы задать вот такую маску для поиска только текстовых файлов — « *.txt «), а второй параметр — настройки поиска (в нашем случае — это SearchOption.AllDirectories , что указывает на то, что поиск будет вестись по всех каталогам).

Отдельное внимание стоит уделить такому моменту: если вы попытаетесь провести поиск как в примере по всем каталогам на диске C:\ , то можете столкнуться ситуацией, когда программа вместо списка файлов выдаст вам исключение типа «Access to the path ‘c:\Documents and Settings’ is denied.» Это связано с тем, что для каждой директории в Windows можно установить права доступа для определенных пользователей и наша программа на C# не может зайти в директорию так как не обладает достаточными для этого правами. Самый простой способ избежать это исключение состоит в том, чтобы организовать свой рекурсивный обход дерева каталогов. Этот момент мы с вами также рассмотрим в последующих статьях. Ну а теперь перейдем непосредственно к нашей теме.

Класс FileInfo

Ниже представлены наиболее часто используемые свойства и методы работы с файлами посредством класса FileInfo :

  • CopyTo(path) — копирует файл в новое место по указанному пути path
  • Create() — создает файл
  • Delete() — удаляет файл
  • MoveTo(destFileName) — перемещает файл в новое место
  • Свойство Directory — получает родительский каталог в виде объекта DirectoryInfo
  • Свойство DirectoryName — получает полный путь к родительскому каталогу
  • Свойство Exists — указывает, существует ли файл
  • Свойство Length — получает размер файла в байтах
  • Свойство Extension — получает расширение файла
  • Свойство Name — получает имя файла
  • Свойство FullName — получает полное имя файла

Как в C# создать файл и записать в него данные?

Для создания нового файла и записи в него данных можно воспользоваться методом Create() :

Или же, если мы точно знаем, что нам необходим текстовый файл, то воспользоваться методом CreateText() :

В отличие от Create() метод CreateText() возвращает нам объект типа StreamWriter , который предоставляет удобные методы и свойства для работы в том числе и со строками, поэтому во втором примере нам не понадобилось преобразовывать строку в массив байтов для записи в файл. В свою очередь, метод Create() удобно использовать для записи бинарных файлов.

Как в C# получить информацию о файле?

Чтобы получить информацию о файле мы можем воспользоваться свойствами класса FileInfo , например, как показано ниже:

Как в C# переместить файл в новое место?

Для перемещения файла в другой каталог в C# используется метод MoveTo() :

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

Как в C# копировать файл?

Копирование файла в C# осуществляется с помощью метода CopyTo() :

Методы CopyTo() и MoveTo() класса FileInfo также имет переопределенные версии в которых вторым параметром выступает параметр булевого типа ( bool ) который указывает на то, необходимо ли перезаписать содержимое файла, если он уже содержится по указанному пути. Если этот параметр равен false (или используется метод с одним параметром), то при обнаружении по новому пути указанного файла C# сгенерирует исключение.

Как в C# удалить файл?

Для удаления файла с диска в C# используется метод Delete() :

Класс File

Класс File реализует схожую с FileInfo функциональность, однако, как и в случае работы с каталогами, этот класс рекомендуется использовать если вам необходима проверка безопасности используемых методов по работе с файлом и вы не планируете использовать класс многократно. Основные методы работы с файлами в C# с использованием класса File следующие:

  • Copy() — копирует файл в новое место
  • Create() — создает файл
  • Delete() — удаляет файл
  • Move() — перемещает файл в новое место
  • Exists(file) — определяет, существует ли файл

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

Итого

Рассмотрели работу с файлами в C#, остановившись подробнее на работе с классом FileInfo . Научились создавать файлы и записывать в них данные, перемещать, копировать и удалять файлы в C#, а также получать информацию о конкретном файле.

How to copy a file in C#

I want to copy a file from A to B in C#. How do I do that?

Suman Banerjee's user avatar

5 Answers 5

Without any error handling code:

The File.Copy method:

Use the FileInfo class.

This should work!

    The Overflow Blog
Linked
Related
Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.8.2.43556

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *