tags:

views:

422

answers:

4

Basically, I get a path like "C:\test\subfolder1\subfolder2\subfolder3\myfile.txt", but it's possible that subfolders 1-3 don't exist already, which means I'd get an exception if I try to write to the file.

Is there a way to create the directory structure the target file is in, either by using some task that creates the structure when it outputs to the file and then deleting the file, or by parsing the directory part of the path and using the mkdir task first?

Any help is appreciated.

Thanks, B.J.

+1  A: 

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

inside your < target> tag should work, but I am not sure what else you want to do along with mkdir?

Sands
The problem is I don't have the directory. I have the file path. I need to get the directory from the file path or have it created.
Benny
A: 
Rob Oxspring
+4  A: 

Ant will create the full tree of directories for you when you use the <mkdir> task. So you just need to use the <dirname> task to get the directory name from the file name.

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

The first line extracts the directory portion of your file path and stores it in the directoryProperty property. The second line creates the directory (and any parent directories that don't exist).

Dan Dyer
Thank you. The dirname task is exactly what I was looking for.
Benny
A: 

Well-behaved Ant tasks are generally expected to create any necessary directory structures unless there is a good reason not to.

Are you writing a task? If so you should add the directory creation logic to your task. If you are getting the task from a third party you should point this fact out to them and have them fix their task. Failing that Dan's solution should work.