프로그래밍 방식으로 애플리케이션 지원 폴더 경로 가져 오기
사용자의 응용 프로그램 지원 폴더에 대한 NSString을 얻으려고합니다.
나는 할 수 있다는 것을 알고 NSString *path = @"~/Library/Application Support";
있지만 이것은 그다지 우아하지 않은 것 같습니다. 나는 사용 NSSearchPathForDirectoriesInDomains
하면서 놀았 지만 꽤 길고 불필요한 객체를 여러 개 생성하는 것 같습니다 (적어도 그것을 구현했습니다).
이를 수행하는 간단한 방법이 있습니까?
아래 @ andyvn22FileManager.default.urls(for:in:)
의 주석에서와 같이 현재 모범 사례 사용 을 위해 구식 입니다.
가장 좋은 방법 은와 NSSearchPathForDirectoriesInDomains
함께 사용 하는 NSApplicationSupportDirectory
것입니다.
예:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *applicationSupportDirectory = [paths firstObject];
NSLog(@"applicationSupportDirectory: '%@'", applicationSupportDirectory);
NSLog 출력 :
applicationSupportDirectory: '/Volumes/User/me/Library/Application Support'
스위프트 4 :
print(NSHomeDirectory())
또는
print(FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first)
과
let yourString = String(FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first)
스위프트 3 :
FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first
사람들이 권장하는 방법을 사용하기 시작하도록합니다.
- (NSArray<NSURL *> * _Nonnull)URLsForDirectory:(NSSearchPathDirectory)directory
inDomains:(NSSearchPathDomainMask)domainMask
문서에서 확장 된 예 :
- (NSURL*)applicationDataDirectory {
NSFileManager* sharedFM = [NSFileManager defaultManager];
NSArray* possibleURLs = [sharedFM URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask];
NSURL* appSupportDir = nil;
NSURL* appDirectory = nil;
if ([possibleURLs count] >= 1) {
// Use the first directory (if multiple are returned)
appSupportDir = [possibleURLs objectAtIndex:0];
}
// If a valid app support directory exists, add the
// app's bundle ID to it to specify the final directory.
if (appSupportDir) {
NSString* appBundleID = [[NSBundle mainBundle] bundleIdentifier];
appDirectory = [appSupportDir URLByAppendingPathComponent:appBundleID];
}
return appDirectory;
}
이것은 나를 위해 작동합니다.
NSError *error;
NSURL* appSupportDir = [[NSFileManager defaultManager]
URLForDirectory:NSApplicationSupportDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:&error];
이것이 내가 데이터베이스를 얻는 데 사용하는 것입니다. 스탠포드 수업에서 얻었습니다. 누군가를 도울 수 있습니다.
NSURL *url = [[[NSFileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"database_name"];
NSLog(@"Database URL: %@",url);
문서 디렉토리에 읽고 쓰기위한 별도의 목적 C 클래스를 만듭니다. 코드 재 작성을 피할 것입니다. 아래는 내 버전입니다.
//Directory.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#define PATH (NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES))
#define BASEPATH (([PATH count] > 0)? [PATH objectAtIndex:0] : nil)
@interface DocumentsDirectory : NSObject
//Here you can also use URL path as return type and file path.
+(void)removeFilesfromDocumentsDirectory:(NSString*)filename;
+(NSString*)writeFiletoDocumentsDirectory:(NSString*)filename;
@end
#import "Directory.h"
@implementation DocumentsDirectory
UIAlertView *updateAlert;
+(void)removeFilesfromDocumentsDirectory:(NSString*)filename
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *filePath = [BASEPATH stringByAppendingPathComponent:filename];
NSError *error;
BOOL success = [fileManager removeItemAtPath:filePath error:&error]; //Remove or delete file from documents directory.
if (success)
{
updateAlert= [[UIAlertView alloc] initWithTitle:@"Congratulations:" message:@"File is updated successfully" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[updateAlert show];
}
else
{
NSLog(@"Could not delete file -:%@ ",[error localizedDescription]);
updateAlert= [[UIAlertView alloc] initWithTitle:@"Try again:" message:[error localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[updateAlert show];
}
}
+(NSString*)writeFiletoDocumentsDirectory:(NSString*)filename
{
NSString *foldDestination = BASEPATH;
NSString *filePath = [foldDestination stringByAppendingPathComponent:filename];
return filePath;
}
@end
참조 URL : https://stackoverflow.com/questions/8430777/programmatically-get-path-to-application-support-folder
'programing tip' 카테고리의 다른 글
C / C ++에서 양수 모듈로를 얻는 가장 빠른 방법 (0) | 2020.12.30 |
---|---|
파일을 열 때 기본값을 펼침으로 설정하는 방법은 무엇입니까? (0) | 2020.12.29 |
find a pattern in files and rename them (0) | 2020.12.29 |
반응 형 D3 차트 (0) | 2020.12.29 |
Windows 8의 Grunt : 'grunt'가 인식되지 않음 (0) | 2020.12.29 |