Ant:创建包含文件的目录(如果它尚不存在)?

时间:2010-01-08 22:08:15

标签: ant

基本上,我得到一个像“C:\ test \ subfolder1 \ subfolder2 \ subfolder3 \ myfile.txt”这样的路径,但子文件夹1-3可能已经不存在了,这意味着我会得到一个异常,如果我试着写信给文件。

是否有办法创建目标文件所在的目录结构,或者通过使用某些任务在输出到文件然后删除文件时创建结构,或者通过解析路径的目录部分并使用首先是mkdir任务?

6 个答案:

答案 0 :(得分:32)

当您使用<mkdir>任务时,Ant将为您创建完整的目录树。因此,您只需使用<dirname>任务从文件名中获取目录名称。

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

第一行提取文件路径的目录部分并将其存储在directoryProperty属性中。第二行创建目录(以及任何不存在的父目录)。

答案 1 :(得分:3)

使用

<mkdir dir="${dir}"/ >
<target>标签内的

应该有效,但我不确定你还想和mkdir一起做什么?

答案 2 :(得分:3)

只需使failonerror=false避免错误就可以停止整个逻辑。

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

答案 3 :(得分:3)

此任务运作良好

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

有时我们可以使用触摸任务

进行替代选择
<touch file="${file}" mkdirs="true" verbose="true"/>

此任务应该完成这项任务,但会产生副作用,无法创建零大小的文件

答案 4 :(得分:1)

我不是百分百肯定它会起作用,但你可能会做以下的事情来制作你想要的父目录:

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

如果这不能直接起作用,那么在使用new属性创建目录之前使用location语法定义属性可能是值得的: <property name="dir" location="${file}/../" />

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

答案 5 :(得分:0)

通常需要表现良好的Ant任务创建任何必要的目录结构,除非有充分的理由不这样做。

你在写一个任务吗?如果是这样,您应该将目录创建逻辑添加到您的任务中。如果你从第三方获得任务,你应该向他们指出这个事实并让他们解决他们的任务。没有Dan的解决方案应该有效。