web-dev-qa-db-ja.com

Ant:ファイルを含むディレクトリがまだ存在しない場合は作成しますか?

基本的に、「C:\ test\subfolder1\subfolder2\subfolder3\myfile.txt」のようなパスを取得しますが、サブフォルダー1〜3がまだ存在していない可能性があります。つまり、実行しようとすると例外が発生します。ファイルに書き込みます。

ファイルに出力するときに構造を作成してからファイルを削除するタスクを使用するか、パスのディレクトリ部分を解析してmkdirタスクを使用することにより、ターゲットファイルが含まれるディレクトリ構造を作成する方法はありますか?最初?

17
Benny

<mkdir>タスクを使用すると、Antはディレクトリの完全なツリーを作成します。したがって、<dirname>タスクを使用して、ファイル名からディレクトリ名を取得する必要があります。

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

最初の行は、ファイルパスのディレクトリ部分を抽出し、それをdirectoryPropertyプロパティに格納します。 2行目は、ディレクトリ(および存在しない親ディレクトリ)を作成します。

34
Dan Dyer

このタスクはうまく機能します

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

タッチタスクを使用して、別の選択肢がある場合もあります

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

このタスクはその仕事をするはずですが、サイズがゼロのファイルを作成するという副作用があります

5
William Leung

failonerror=falseを作成するだけで、エラーを回避してロジック全体を停止できます。

<delete includeemptydirs="true" failonerror="false">
   <fileset dir="${builder-base.dir}" includes="**/*"/>
</delete>     
4
john

を使用して

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

<target>タグ内は機能するはずですが、mkdirと一緒に他に何をしたいのかわかりませんか?

3
Sands

100%動作するかどうかはわかりませんが、次のような操作を実行して、目的の親ディレクトリを作成できる可能性があります。

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

それがすぐに機能しない場合は、新しいプロパティでディレクトリを作成する前に、場所の構文を使用してプロパティを定義する価値があるかもしれません:<property name="dir" location="${file}/../" />

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

2
Rob Oxspring