What happens if another service/extra sends an email before FormIt does? You probably have to clean up the attachment manually when validation etc. fails.
If I understand the Documentation right, a preHook fires when the form is loaded. But wehn this happend, is could be that the textfield is not filled yet.
I agree with @joshualuckers that it is kinda ugly to add an attachment in a hook without sending the actual email.
You could just send the email in your custom hook and not use the email hook at all, or maybe you could try to simulate a successful file upload by adding a new field in your hook that is an array with the keys “tmp_name”, “name” and “error” and check if that gets correctly added as an attachment in the email hook.