Well, do you have control on the process producing the files onto the desktop? Because the best solution is really to change this process so that it copies the files with a different name (say "*.pd_"), and that it renames them to "*.pdf" only when the file is complete. This way, when you grep the directory content, you only pick up files that are complete.
Or create the files in a different directory on the same disk, and move it into the right directory once the file is complete.
Comment on Re^3: File::Copy - move() function corrupting files