Подтвердить что ты не робот

Ant: создать каталог, содержащий файл, если он еще не существует?

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

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

4b9b3361

Ответ 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 должно работать.