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?
![]()
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.