В качестве файла назначения указан каталог а не файл

Обновлено: 04.07.2024

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

Все методы класса File статические, методы класса FileInfo работают только через объектную ссылку.

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

Для использования любого из этих методов следует включить пространство имен System.IO перед использованием их в коде приложения.

Удаление

Метод Delete класса File удаляет файл, путь к которому (относительный или абсолютный) передан ему строкой в качестве параметра.

Пример использования:

Удалить можно только созданный и закрытый файл. И если в первом случае не возникнет исключение, во втором – обязательно. Поэтому перед процедурой удаления лучше организовывать проверку существования файла:

Пример использования:

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

Класс File для удаления имеет в своей функционале метод Copy(), принимающий два параметра типа string: имя копируемого файла и имя конечного. Имена передаются методу вместе с путем к нему (абсолютным или относительным).

Метод копирует информацию из файла и все файловые атрибуты в файл-назначения с указанным именем. Если имена файла копируемого файла и файла назначения совпадают, копирование не будет выполнено. Если необходим такой функционал нужно воспользоваться перегруженной версией метода с третьим параметром типа Boolean.

Пример использования:

Метод CopyTo класса FileInfo принимает только один строковый параметр – файл назначения, работает аналогично методу Copy класса File.

Пример использования:

Файл назначения перед копированием не должен существовать. Метод CopyTo его создаст. Поэтому в примере выше инициирована проверка его существования перед копированием.

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

Метод Move принимает два параметра типа string: файл-источник и файл-назначения. При вызове копирует информацию и все атрибуты из файла-источника в файл-назначения, затем файл источник удаляется. Конечный файл не должен существовать перед копированием.

Допустимо если имя файла-источника совпадает с именем фала назначения. Но перемещение файла-источника в файл-назначения внутри одной директории вызовет исключение.

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

Пример использования:

Вторая проверка существования файла-источника инициирована в тех случаях, когда перемещение совмещено в коде приложения с чтением файла. Особенно это касается многопоточных приложений. Если проверка показывает, что файл еще существет, то необходимо закрыть его и запустить процедуру удаления вручную, например, с помощью File.Delete.

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

4 ответа

Для выполнения File.Copy источником и местом назначения будет допустимый путь к файлу. в вашем случае это папка, а не файл. в этом случае вы можете получить какое-то исключение, как

Не удалось найти часть пути 'F: \ New folder'

При выполнении приложения текущим каталогом будет папка bin . вам нужно указать относительный путь оттуда. Позвольте my program/subfolder быть папками в вашем решении, поэтому код для этого будет выглядеть так:

Где ../ поможет вам вернуться на один шаг назад из текущего каталога. Еще одна вещь, о которой вам нужно позаботиться, это третий необязательный параметр в методе File.Copy . Передав true для этого параметра, вы сможете перезаписать содержимое существующего файла. Также убедитесь, что папка C:\Targetlocation существует, поскольку она не создаст ее для вас.

Вы можете указать относительный путь из текущего рабочего каталога, который можно проверить с помощью Environment.CurrentDirectoy.

Например, если текущим рабочим каталогом является D: \ App, расположение исходного файла - D: \ App \ Res \ Source.txt, а целевое расположение - D: \ App \ Res \ Test \ target.txt, тогда ваш фрагмент кода будет быть -

Параметры sourceFileName и destFileName могут указывать информацию об относительном или абсолютном пути. Информация об относительном пути интерпретируется как относительно текущего рабочего каталога. Этот метод не поддерживает символы подстановки в параметрах.

Убедитесь, что ваш целевой каталог существует. Вы можете использовать Directory.CreateDirectory

С Directory.CreateDirectory() вам не нужно проверять, существует ли каталог. Из документации:

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

В разделе Примеры показан принцип использования этой команды.

Синтаксис

Параметры

Комментарии

Использование /z

Если вы потеряли подключение на этапе копирования (например, если сервер переходит в режим «вне сети»), то после повторного подключения Подключение возобновится. /z также отображает процент выполнения операции копирования для каждого файла.

Использование /y в переменной среды копикмд.

В переменной среды КОПИКМД можно использовать параметр /y . Эту команду можно переопределить с помощью /-и в командной строке. По умолчанию выводится запрос на перезапись.

Копирование зашифрованных файлов

Копирование зашифрованных файлов на том, который не поддерживает EFS, приводит к ошибке. Сначала расшифровать файлы или скопировать их на том, который поддерживает EFS.

Чтобы добавить файлы, укажите один файл для назначения, но несколько файлов для источника (то есть с помощью подстановочных знаков или формата file1 + file2 + файл3).

Значение по умолчанию для назначения

Если опустить назначение, команда xcopy скопирует файлы в текущий каталог.

Указание того, является ли назначение файлом или каталогом

Нажмите клавишу F, если хотите скопировать файл или файлы в файл. Нажмите клавишу D, если хотите скопировать файл или файлы в каталог.

Использование команды xcopy для установки атрибута архива для целевых файлов

Команда xcopy создает файлы с установленным атрибутом Archive, независимо от того, был ли этот атрибут задан в исходном файле. Дополнительные сведения об атрибутах файлов и attribсм. в разделе Дополнительные ссылки.

Сравнение xcopy и diskcopy

Если у вас есть диск, содержащий файлы в подкаталогах, и вы хотите скопировать его на диск, имеющий другой формат, используйте команду xcopy вместо команды diskcopy. Так как команда diskcopy копирует диски по дорожке, исходный и целевой диски должны иметь одинаковый формат. Команда xcopy не имеет этого требования. Используйте xcopy , если вам не нужна полная копия образа диска.

Коды выхода для команды xcopy

Для обработки кодов завершения, возвращаемых xcopy, используйте параметр ERRORLEVEL в командной строке If в пакетной программе. Пример пакетной программы, обрабатывающей коды завершения с помощью If, см. в разделе Дополнительные ссылки. В следующей таблице перечислены все коды выхода и их описание.

Примеры

1. чтобы скопировать все файлы и подкаталоги (включая все пустые подкаталоги) с диска A на диск B, введите:

2. чтобы включить в предыдущий пример все системные или скрытые файлы, добавьте параметр командной строки/h следующим образом:

3. чтобы обновить файлы в каталоге \репортс с файлами в каталоге \равдата, которые были изменены с 29 декабря 1993 г., введите:

4. чтобы обновить все файлы, существующие в \репортс в предыдущем примере, независимо от даты, введите:

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

Файл xcopy. out содержит список всех копируемых файлов.

6. чтобы скопировать каталог \кустомер и все подкаталоги в каталог \\публик\аддресс на сетевом диске H:, оставьте атрибут "только для чтения" и при создании нового файла в H: введите:

8. можно создать пакетную программу для выполнения операций xcopy и использовать пакет If для обработки кода выхода при возникновении ошибки. Например, в следующей пакетной программе для параметров источника и назначения xcopy используются заменяемые параметры:

Чтобы использовать предыдущую пакетную программу для копирования всех файлов в каталоге К:\пргмкоде и его подкаталогов на диск B, введите:

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

В предыдущем примере это конкретное значение исходного параметра .\ток *. yml копирует те же три файла, даже если их два символа пути . \ были удалены. Однако файлы не копируются, если из исходного параметра был удален подстановочный знак «звездочка», что делает его просто .\ток.ИМЛ.

Конфигурация компьютера
Процессор: Intel Core i5 (660)
Материнская плата: Gigabyte GA-P55-UD3L
Память: 4 GBt
HDD: WD3000HLHX + WD7500AARS
Видеокарта: GT-220
Звук: Realtek
CD/DVD: Pioneer DVD-RW DVR-219L
Монитор: VieSonic VA2014w
ОС: Win 7 Pro
Индекс производительности Windows: 5.1
А ответ известен? Я использовал вариант времен dos'а:
> xcopy откуда куда /D /E /C /H /R /Y < c:\bat\d
где c:\bat\d - файл из 3-х байт: 64 0D 0A , т.е. d <cr> <lf>, в смысле, копирую каталог.

-------
Когда у тебя есть только молоток, все похоже на гвоздь

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

А если копируем файл, как будет выглядит команда? Будет ли это работать в win 2000, xp, 2003?!
Конфигурация компьютера
Процессор: Intel Core i7-3770K
Материнская плата: ASUS P8Z77-V LE PLUS
Память: Crucial Ballistix Tactical Tracer DDR3-1600 16 Гб (2 x 8 Гб)
HDD: Samsung SSD 850 PRO 256 Гб, WD Green WD20EZRX 2 Тб
Видеокарта: ASUS ROG-STRIX-GTX1080-O8G-11GBPS
Звук: Realtek ALC889 HD Audio
Блок питания: be quiet! Straight Power 11 650W
CD/DVD: ASUS DRW-24B5ST
Монитор: ASUS VG248QE 24"
ОС: Windows 8.1 Pro x64
Индекс производительности Windows: 8,1
Прочее: корпус: Fractal Design Define R4
  • использование вместо xcopy обычной copy (она таких вопросов не задает);
  • echo F | xcopy чтокуда (в этом случае при запросе будет введено F, то есть файл).
Конфигурация компьютера
Процессор: Intel Core i5 (660)
Материнская плата: Gigabyte GA-P55-UD3L
Память: 4 GBt
HDD: WD3000HLHX + WD7500AARS
Видеокарта: GT-220
Звук: Realtek
CD/DVD: Pioneer DVD-RW DVR-219L
Монитор: VieSonic VA2014w
ОС: Win 7 Pro
Индекс производительности Windows: 5.1

-------
Когда у тебя есть только молоток, все похоже на гвоздь

echo F | xcopy что куда (в этом случае при запросе будет введено F, то есть файл) »

Да это сработало! Только вот теперь не работает запрос подтверждения копирования, т.к. он на все вопросы отвечает F…

А если копируем файл, как будет выглядит команда? и будет ли в этом случае работать запрос на подтверждение копирования?

Жаль что choice в NT есть только в Resource Kit.

Последний раз редактировалось akrav, 09-01-2008 в 16:48 .

Конфигурация компьютера
Процессор: Intel Core i5 (660)
Материнская плата: Gigabyte GA-P55-UD3L
Память: 4 GBt
HDD: WD3000HLHX + WD7500AARS
Видеокарта: GT-220
Звук: Realtek
CD/DVD: Pioneer DVD-RW DVR-219L
Монитор: VieSonic VA2014w
ОС: Win 7 Pro
Индекс производительности Windows: 5.1
Можно сделать два файла: один с 'd' другой с 'f' в содержимом. И использовать их в нужном контексте.
будет ли в этом случае работать запрос на подтверждение копирования? »

-------
Когда у тебя есть только молоток, все похоже на гвоздь

Все дело в том, что при копировании файла с переименованием. Первый вопрос “’это папка или файл” (F | D) затем “скопировать файл?” (Y | N). Мне очень нужно, чтобы ответ на первый вопрос происходил автоматически (ответ “F”), а ответ на второй вопрос осуществлялся интерактивно. В случаи использования “echo F| xcopy …” ответ на первый вопрос автоматизируется, а вместе с ним и второй, т.к. норовит везде ответить “F”. Это приводит к неверной работе команды xcopy….

Читайте также: