I’m attempting to create an app that will move files (some of them large) and I need to know when they aren’t busy. Simple enough, right? That’s what I thought.
Every time I check the ‘busy status’ of a file that is in the process of being copied, the result is always false. I’ve never seen a ‘busy status’ of true. Am I crazy or just stupid?
Right from the start the ‘info for’ reports that the ‘busy status’ is false and never changes. Perhaps I have something wrong. Any thoughts would be appreciated!
set TheResults to (info for file (FileToGetInfoOn))
if busy status of TheResults then
--wait and then check again
end if
--do something now that busy status is false
The short version: you can’t use busy status under OS X, it apparently has a different meaning under Unix. The workaround is to try to open the file with write access; if you succeed, the file was not in use by another app, so you can close it and do what you want.
–
Shane Stanley
Bummer. It looks like I have to do it the hard way. Thanks for the help!
Here is a pre-writen one:
(*
isBusy
Checks if you can write to a file or not (if it is opened for access by other process).
Parameters:
f: file path, alias, posix path
Example:
isBusy("path:to:file.txt") --> false
*)
to isBusy(f)
set f to f as Unicode text
if f does not contain ":" then set f to POSIX file f as Unicode text
if busy status of (info for alias f) then return true
--> but some times this is not good enough
try
open for access file f with write permission
close access result
return false
on error
return true
end try
end isBusy