Check out a totally free program called PhotoRec. It was created to recover pictures from hard drives and flash cards. It does a great job at that, and any file for that matter. I used it for a computer science project and it was terrific. The only downside I found was that the recovered files are named based on their position in the memory, not its previous name.
http://www.cgsecurity.org/wiki/PhotoRec