Ant: Создать каталог, содержащий файл, если он еще не существует? - PullRequest
15 голосов
/ 09 января 2010

По сути, я получаю путь типа "C: \ test \ subfolder1 \ subfolder2 \ subfolder3 \ myfile.txt", но возможно, что подпапки 1-3 еще не существуют, что означает, что я получу исключение, если Я пытаюсь записать в файл.

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

Ответы [ 6 ]

32 голосов
/ 09 января 2010

Ant создаст для вас полное дерево каталогов, когда вы используете задачу <mkdir>. Так что вам просто нужно использовать задачу <dirname>, чтобы получить имя каталога из имени файла.

 <dirname property="directoryProperty" file="${filePathProperty}"/>
 <mkdir dir="${directoryProperty}" />

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

3 голосов
/ 08 июня 2013

Эта задача хорошо работает

<mkdir dir="${file}/../"/>

Иногда у нас может быть альтернативный выбор, используя сенсорное задание

<touch file="${file}" mkdirs="true" verbose="true"/>

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

3 голосов
/ 22 февраля 2012

Просто сделайте failonerror=false, чтобы избежать ошибки, чтобы остановить всю логику.

<delete includeemptydirs="true" failonerror="false">
   <fileset dir="${builder-base.dir}" includes="**/*"/>
</delete>     
3 голосов
/ 09 января 2010

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

<mkdir dir="${dir}"/ >

внутри вашего тега <target> должно работать, но я не уверен, что еще вы хотите сделать вместе с mkdir?

1 голос
/ 09 января 2010

Я не уверен на 100%, что это сработает, но вы можете сделать что-то вроде следующего, чтобы создать родительский каталог, за которым вы:

<mkdir dir="${file}/../"/>

Если это не сработает сразу, то, возможно, стоит определить свойство с использованием синтаксиса расположения перед созданием каталога с новым свойством: <property name="dir" location="${file}/../" /></p> <p><mkdir dir="${dir}" />

0 голосов
/ 09 января 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...