> Neill Taylor wrote: > > > > I am writing a script which will poll a directory and then move any files > > in the directory to a new directory dependant upon its name. > > > > The problem I think I might have is that the script may try to pick a file > > that is still being copied into the directory whilst the application is > > still trying to write the file. > > > > What is the best method in Perl to prevent errors. > > Hi Neill. > > If your application is well-behaved then it may lock the file > for writing. If your Perl program asks for an exclusive lock > then it will be granted if it no longer being accessed. > Take a look at > > perldoc -f flock > > Another way is to check the size of file. A file will often > show a size of zero until it is closed by the writing > application. > > Finally, if only one file at a time is being written then > just sort the them in order of creation date and move all > but the latest one. > > What works you will find only by experimentation. >
Depending on what is writing the files, aka another controllable program? I have had good luck with writing the file to a temporary location, usually with a dot on the front, then executing a move from that temp location to the real name. A move is usually a single action (at least that's my understanding) and for most filesystems is merely a single inode update. Then just have the directory watcher skip dot files... Though the lock would probably be better... http://danconia.org -- Boycott the Sugar Bowl! You couldn't pay me to watch that game. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>