That might work if the entire file was on consecutive blocks. It might be, it might not be. If it was, you could try
dd if=/dev/zero bs=1 count=0 of=<file> seek=<filesize>
which would write 0 bytes to the file (!), but as a side effect it would seek to the end of the file first, thus setting the filesize. WARNING: This is just off the top of my head, I have no idea whether this could even theoretically work. So don't even think about it unless you backup the entire partition first.
For a more sensible approach, it depends on your fs. If it's ext2/ext3, you could try debugfs (I used this once to recover some files without knowing wtf I was doing, but I winged it! rtfm!
). There is a debugreiserfs command but I don't know if it has the capability to recover files. Again, backup the partition first, if you have the space.