Re: Copying large files with progress indicator
Re: Copying large files with progress indicator
- Subject: Re: Copying large files with progress indicator
- From: Mike Abdullah <email@hidden>
- Date: Tue, 1 Aug 2006 18:50:47 +0100
Thanks Shawn. I tried to get the callback system to work, but I
couldn't persuade it :( Does anyone have any sample code for this?
I shall also have a look at the docs like you suggest as well.
Mike.
On 1 Aug 2006, at 16:51, Shawn Erickson wrote:
On Aug 1, 2006, at 8:38 AM, Mike Abdullah wrote:
10.4 only is fine for me. I've had a look at FSCopyObjectAsync,
and after a search around, found Apple's nice FSFileOperation
sample code:
http://developer.apple.com/samplecode/FSFileOperation/
I've got a quick simple project up and running using this,
however, I wonder if someone could help clarify something for me.
My code is:
- (IBAction)doCopy:(id)sender
{
OSStatus err;
FSRef sourceFileRef, destinationDirectoryRef;
// Build the parameters
FSFileOperationRef fileOp = FSFileOperationCreate
(kCFAllocatorDefault);
FSPathMakeRef((UInt8 *)[@"/Users/dev/Desktop/test.dmg"
fileSystemRepresentation], &sourceFileRef, NULL);
FSPathMakeRef((UInt8 *)[@"/Users/dev/Desktop/Copy/"
fileSystemRepresentation], &destinationDirectoryRef, NULL);
OptionBits options = kFSFileOperationDefaultOptions;
// Do the copy
err = FSCopyObjectAsync(fileOp, &sourceFileRef,
&destinationDirectoryRef, NULL, options, NULL, 0.01, NULL);
while (YES)
{
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 5.0, true);
CFDictionaryRef infoDict2;
(void) FSFileOperationCopyStatus(fileOp, NULL, NULL, &err,
&infoDict2, NULL);
NSLog(@"%@", (NSDictionary *)infoDict2);
}
}
Now obviously, I need to do this in a separate thread which isn't
a problem. However, what I don't really understand is what
exactly goes on with the CFRunLoopRunInMode call. It seems that
during the duration of this method, that's when a chunk of file
copying is actually done, but once I stick the code in a thread,
should I really use this, or is there something better?
You don't actually have to do this in a separate thread. You can
register a callback and execute this operation on your main thread
(the main thread in a Cocoa application has an active runloop). You
will get callbacks from your main runloop as the copy progresses
and when it finishes.
The example above is written to be run from a secondary thread and
doesn't leverage the callback capability (why it is running its own
runloop periodically).
Review the docs on runloops (CFRunLoop and NSRunLoop) if you don't
understand what those are.
-Shawn
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden