基本上,我得到一个像“C:\ test \ subfolder1 \ subfolder2 \ subfolder3 \ myfile.txt”这样的路径,但子文件夹1-3可能已经不存在了,这意味着我会得到一个异常,如果我试着写信给文件。
是否有办法创建目标文件所在的目录结构,或者通过使用某些任务在输出到文件然后删除文件时创建结构,或者通过解析路径的目录部分并使用首先是mkdir任务?
答案 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的解决方案应该有效。