FROM : Mike Abdullah
DATE : Tue Aug 01 17:38:19 2006
On 1 Aug 2006, at 02:33, Adam R. Maxwell wrote:
>
> On Jul 31, 2006, at 17:06, Mike Abdullah wrote:
>
>> OK, that rather surprises me - why haven't Apple done a decent
>> file copying system in Cocoa yet! Maybe I should file a request.
>>
>> So, I downloaded MoreFilesX. It's readme says quite a bit about
>> the HFD+ APIs. Am I right in thinking that the code will use the
>> HFS+ if suitable, but that it will still work for non-HFS+
>> operations?
>
> You might want to look at FSCopyObject; I think it's more modern
> (and easier to use) than MoreFilesX <http://developer.apple.com/
> samplecode/FSCopyObject/index.html>. It loses xattrs on 10.4,
> though, unfortunately.
>
> If you can require 10.4, take a look at FSCopyObjectAsync, which
> has a callback for periodic updates. These functions are only
> documented in the Files.h header, though.
>
> -- Adam
>
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?
Mike.
DATE : Tue Aug 01 17:38:19 2006
On 1 Aug 2006, at 02:33, Adam R. Maxwell wrote:
>
> On Jul 31, 2006, at 17:06, Mike Abdullah wrote:
>
>> OK, that rather surprises me - why haven't Apple done a decent
>> file copying system in Cocoa yet! Maybe I should file a request.
>>
>> So, I downloaded MoreFilesX. It's readme says quite a bit about
>> the HFD+ APIs. Am I right in thinking that the code will use the
>> HFS+ if suitable, but that it will still work for non-HFS+
>> operations?
>
> You might want to look at FSCopyObject; I think it's more modern
> (and easier to use) than MoreFilesX <http://developer.apple.com/
> samplecode/FSCopyObject/index.html>. It loses xattrs on 10.4,
> though, unfortunately.
>
> If you can require 10.4, take a look at FSCopyObjectAsync, which
> has a callback for periodic updates. These functions are only
> documented in the Files.h header, though.
>
> -- Adam
>
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?
Mike.
| Related mails | Author | Date |
|---|---|---|
| Mike Abdullah | Jul 31, 18:04 | |
| Scott Ribe | Jul 31, 19:32 | |
| Mike Abdullah | Aug 1, 02:06 | |
| Adam R. Maxwell | Aug 1, 03:33 | |
| Mike Abdullah | Aug 1, 17:38 | |
| Shawn Erickson | Aug 1, 17:51 | |
| Mike Abdullah | Aug 1, 19:50 |






Cocoa mail archive

