开发者

Overwriting a file programmatically in Cocoa

开发者 https://www.devze.com 2023-02-09 15:06 出处:网络
This code copies the referenced file and places it in the Docs Directory. I\'m trying to build a simple backup solution. The problem is this operation does not overwrite the existing file if the opera

This code copies the referenced file and places it in the Docs Directory. I'm trying to build a simple backup solution. The problem is this operation does not overwrite the existing file if the operation is repeated.

Two questions:

What's the best way to overwrite in code?

How difficult would it be to append the current date to each copied file? In this case there would be no overwrite operation. This would be much more useful for keeping incremental backups. If I decide to do it this way I understand I would need to create a new path in order to keep things organized.

Thanks.

Paul

    NSString * name  = @"testFile";
NSArray  * files = [NSArray arrayWithObject: name];

NSWorkspace * ws = [NSWorkspace sharedWorkspace];

[ws performFileOperation: NSWorkspaceCopyOperation
                  source: @"~/Library/Application Support/testApp"
             destination: @"~/Documents/"
             开发者_开发知识库      files: files
                     tag: 0];


You could try using NSFileManager, example below (untested):

// Better way to get the Application Support Directory, similar method for Documents Directory
- (NSString *)applicationSupportDirectory {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
    return [basePath stringByAppendingPathComponent:@"testApp"];
}  

- (void) removeFile {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *applicationSupportDirectory = [self applicationSupportDirectory];
    NSError *error = nil;

    NSString* filePath = [applicationSupportDirectory stringByAppendingPathComponent: @"testFile"];
    if ([fileManager fileExistsAtPath:filePath isDirectory:NULL]) {
        [fileManager removeItemAtPath:filePath error:&error];
    }
}

Edit: Take a look at the NSFileManager Class Reference for other functions that might be useful (for your second question).

0

精彩评论

暂无评论...
验证码 换一张
取 消