Thanks again for the reply. Now I'm thinking that maybe just overriding -writeToURL:ofType:error: may be the way to go. In this method, I should just be able to write any changed files out. I hope.
The trouble with all of these methods is that they tell you not to rely on fileURL. But in my situation, I want to be able to rely on it. A window can't be opened before a package is created in my app, so at no point can the user call a load or save without the document existing on disk. I don't want - at any point- the document architecture to do anything with that file package. All I ever want to do is access individual files within it. There just seems to be nothing on this anywhere. But I'm hoping that if I put everything in this method, and then just as a failsafe, override the other NSDocument -write... methods to do absolutely nothing, that things will work okay. What I don't want to do is have to copy everything in the package and save the whole thing. For users who have projects that are hundreds of megabytes, this means a slow save. The whole point of the file format I have chosen is that it should mean quick saves - only saving individual files within the wrapper that have changed - and safety, in that all the text is stored in individual files inside the wrapper. But nothing in the documentation seems to support this sort of setup. Still, I'll experiment with -writeToURL:... and see how it goes... Thanks again! All the best, Keith ----- Original Message ---- From: Ken Thomases <[EMAIL PROTECTED]> To: Keith Blount <[EMAIL PROTECTED]> Cc: cocoa-dev@lists.apple.com Sent: Wednesday, May 7, 2008 10:46:39 PM Subject: Re: Saving only required files in a file wrapper? Hi, On May 7, 2008, at 3:08 PM, Keith Blount wrote: > Many thanks for your response... Sure thing. I'm happy to flail in the dark and guess wildly with the best of them. ;) > Hmm, I think you're right. I overrided -saveDocument: because it > looked as though -writeToURL: and all of the other -write... methods > expected you to write all the data at any one time. It's possible > for my file packages to run to hundreds of megabytes, so I only ever > want to write the changed files at any save point (usually only ever > one or two RTFD files within the package actually require saving at > any one time). There's not much in the docs about doing this - > everything I can find seems to assume that you will save everything, > even when it comes to packages (as file wrappers), at once, which is > why I took a screwy way. Yeah, it's hard to see how one can accomplish what you're trying to do. I wonder... what happens if you compose a directory NSFileWrapper from an existing directory (which will recursively fill it with file wrappers referencing the directory's contents), then remove the wrappers for the individual items you want to replace, then add new file wrappers for those items, then save that whole file wrapper to the desired destination location? Are there any smarts in there to avoid doing a full copy of all of the items which weren't changed, perhaps using hard links or the like? > I still wonder what the best way of doing it is. - > writeToURL:ofType:forSaveOperation:originalContentsURL:error: perhaps? Well, that seems to give you the greatest flexibility, and gives you both the new and old URLs, but -- by the very fact that you're given two URLs -- the explicit fact is that you are creating a new document on disk rather than doing a minimal modification of the old one. So, you'd have to perform the copy of all of the parts that are the same between the two, which is what you're trying to avoid. > Also, is it possible that -writeToURL: is getting called behind the > back of -saveDocument:? I considered this but assumed (always a bad > mistake) that it would be safe as I thought that all of the - > write... methods did nothing unless you overrode them. I don't know. That's certainly one of the possibilities I considered. I think you have to assume it's possible. For instance, I would not expect the auto-save features of NSDocument to go through - saveDocument:. -saveDocument: is an action method, intended to be triggered by the Save menu item (and similar GUI controls). So, I would expect that it would have all sorts of high-level functionality like running a save panel if the document hasn't been saved before. Because of that, the framework wouldn't use it when it needs to do something low-level. Cheers, Ken ____________________________________________________________________________________ Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]