开发者

Appending NSString while using NSApplicationSupportDirectory to create a new directory

开发者 https://www.devze.com 2023-02-10 15:02 出处:网络
I have been trying to create a new file inside of my application support folder while using NSApplicationSupportDirectory; I can write a file to it, but I have been unable to create a folder inside of

I have been trying to create a new file inside of my application support folder while using NSApplicationSupportDirectory; I can write a file to it, but I have been unable to create a folder inside of Application Support.

NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSAppli开发者_JS百科cationSupportDirectory, NSUserDomainMask, YES);
NSString *applicationDirectory =  [paths objectAtIndex:0];  

//make a file name to write the data to using the application support: (attempting to create the blasted directory inside of application support directory
NSString *fileName = [NSString stringWithFormat:@"%@/managersemail.txt",
                      applicationDirectory];
//create content - formats with the managersemail.txt location
NSString* content = [NSString stringWithFormat:@"%@",[nameField stringValue]];
//save content to the documents directory
[content writeToFile:fileName
          atomically:NO
            encoding:NSStringEncodingConversionAllowLossy
               error:nil];


NSDictionary* errorDict;

The code that I have listed above works great, except for the part about creating the folder in which I want to place the managersemail.txt. I tried to mimic the stringWithFormat that is listed in the NSString* content and then varying several ways however to no avail! Any thoughts?

NSAppleEventDescriptor* returnDescriptor = NULL;


Perhaps the solution provided on Cocoa with Love might be useful?

Excerpt:

- (NSString *)findOrCreateDirectory:(NSSearchPathDirectory)searchPathDirectory
    inDomain:(NSSearchPathDomainMask)domainMask
    appendPathComponent:(NSString *)appendComponent
    error:(NSError **)errorOut
{
    // Search for the path
    NSArray* paths = NSSearchPathForDirectoriesInDomains(
        searchPathDirectory,
        domainMask,
        YES);
    if ([paths count] == 0)
    {
        // *** creation and return of error object omitted for space
        return nil;
    }

    // Normally only need the first path
    NSString *resolvedPath = [paths objectAtIndex:0];

    if (appendComponent)
    {
        resolvedPath = [resolvedPath
            stringByAppendingPathComponent:appendComponent];
    }

    // Check if the path exists
    BOOL exists;
    BOOL isDirectory;
    exists = [self
        fileExistsAtPath:resolvedPath
        isDirectory:&isDirectory];
    if (!exists || !isDirectory)
    {
        if (exists)
        {
            // *** creation and return of error object omitted for space
            return nil;
        }

        // Create the path if it doesn't exist
        NSError *error;
        BOOL success = [self
            createDirectoryAtPath:resolvedPath
            withIntermediateDirectories:YES
            attributes:nil
            error:&error];
        if (!success) 
        {
            if (errorOut)
            {
                *errorOut = error;
            }
            return nil;
        }
    }

    if (errorOut)
    {
        *errorOut = nil;
    }
    return resolvedPath;
}


Maybe you can try using the NSFileManager to create the folder, then write the file into the folder.

NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *applicationSupport = [[NSString stringWithString:@"~/Library/Application Support/'YOUR APP'] stringByExpandingTildeInPath];
if ([fileManager fileExistsAtPath:applicationSupport] == NO)
    [fileManager createDirectoryAtPath:applicationSupport withIntermediateDirectories:YES attributes:nil error:nil];

NSString *fileName = [NSString stringWithFormat:@"%@/managersemail.txt", applicationSupport];
NSString* content = [NSString stringWithFormat:@"%@",[nameField stringValue]];
//save content to the documents directory
[content writeToFile:fileName
          atomically:NO
            encoding:NSStringEncodingConversionAllowLossy
               error:nil];

So something like that should work. Feel free to leave comments to ask questions.

0

精彩评论

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