В качестве файла назначения указан каталог а не файл
Обновлено: 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 |
> 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 |
будет ли в этом случае работать запрос на подтверждение копирования? » |
-------
Когда у тебя есть только молоток, все похоже на гвоздь
Все дело в том, что при копировании файла с переименованием. Первый вопрос “’это папка или файл” (F | D) затем “скопировать файл?” (Y | N). Мне очень нужно, чтобы ответ на первый вопрос происходил автоматически (ответ “F”), а ответ на второй вопрос осуществлялся интерактивно. В случаи использования “echo F| xcopy …” ответ на первый вопрос автоматизируется, а вместе с ним и второй, т.к. норовит везде ответить “F”. Это приводит к неверной работе команды xcopy….
Читайте также: