Ant: создать каталог, содержащий файл, если он еще не существует?
В принципе, я получаю такой путь, как "C:\test\subfolder1\subfolder2\subfolder3\myfile.txt", но возможно, что вложенные папки 1-3 уже не существуют, что означает, что я получаю исключение, если Я пытаюсь записать файл.
Есть ли способ создать структуру каталогов, в которой находится целевой файл, либо используя некоторую задачу, которая создает структуру, когда она выводится в файл, а затем удаляет файл или анализирует часть каталога пути и использует сначала задача mkdir?
Ответы
Ответ 1
Ant создаст для вас полное дерево каталогов, когда вы используете задачу <mkdir>
. Поэтому вам просто нужно использовать задачу <dirname>
, чтобы получить имя каталога из имени файла.
<dirname property="directoryProperty" file="${filePathProperty}"/>
<mkdir dir="${directoryProperty}" />
Первая строка извлекает часть каталога вашего пути к файлу и сохраняет ее в свойстве directoryProperty
. Вторая строка создает каталог (и любые родительские каталоги, которые не существуют).
Ответ 2
Используя
<mkdir dir="${dir}"/ >
внутри тэга <target>
должен работать, но я не уверен, что еще вы хотите сделать с mkdir?
Ответ 3
Просто сделайте failonerror=false
, чтобы избежать ошибки, чтобы остановить всю логику.
<delete includeemptydirs="true" failonerror="false">
<fileset dir="${builder-base.dir}" includes="**/*"/>
</delete>
Ответ 4
Эта задача хорошо работает
<mkdir dir="${file}/../"/>
Иногда у нас может быть альтернативный выбор, используя touch task
<touch file="${file}" mkdirs="true" verbose="true"/>
Эта задача должна выполнить задание, но будет иметь побочный эффект для создания файла с нулевым размером
Ответ 5
Я не уверен на 100%, что это сработает, но вы можете сделать что-то вроде следующего, чтобы создать родительский каталог:
<mkdir dir="${file}/../"/>
Если это не сработает сразу, возможно, стоит определить свойство, используя синтаксис местоположения, перед созданием каталога с новым свойством:
<property name="dir" location="${file}/../" />
<mkdir dir="${dir}" / >
Ответ 6
Ожидаемые задачи Ant, как правило, должны создавать любые необходимые структуры каталогов, если нет веских оснований не делать этого.
Вы пишете задание? Если это так, вы должны добавить логику создания каталога в свою задачу. Если вы получаете задание от третьей стороны, вы должны указать на этот факт, и заставить их исправить свою задачу. В противном случае решение Dan должно работать.