반응형
Resources 폴더에있는 파일 목록 가져 오기-iOS
iPhone 응용 프로그램의 "Resources"폴더에 "Documents"라는 폴더가 있다고 가정 해 보겠습니다.
런타임에 해당 폴더에 포함 된 모든 파일의 배열 또는 일부 유형의 목록을 가져올 수있는 방법이 있습니까?
따라서 코드에서는 다음과 같습니다.
NSMutableArray *myFiles = [...get a list of files in Resources/Documents...];
이게 가능해?
다음 Resources
과 같이 디렉토리 경로를 얻을 수 있습니다 .
NSString * resourcePath = [[NSBundle mainBundle] resourcePath];
그런 다음 Documents
경로에를 추가하고
NSString * documentsPath = [resourcePath stringByAppendingPathComponent:@"Documents"];
그런 다음의 디렉토리 목록 API를 사용할 수 있습니다 NSFileManager
.
NSError * error;
NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];
참고 : 번들에 소스 폴더를 추가 할 때 "복사 할 때 추가 된 폴더에 대한 폴더 참조 생성 옵션"을 선택해야합니다.
빠른
Swift 3 업데이트
let docsPath = Bundle.main.resourcePath! + "/Resources"
let fileManager = FileManager.default
do {
let docsArray = try fileManager.contentsOfDirectory(atPath: docsPath)
} catch {
print(error)
}
추가 읽기 :
- NSFileManager 클래스 참조
- 파일 시스템 프로그래밍 가이드
- 오류 처리 문서
- Swift 2.0 블로그 게시물의 오류 처리
- 메소드가 던질 수있는 오류의 종류를 찾고 Swift에서 잡는 방법
이 코드를 시도해 볼 수도 있습니다.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError * error;
NSArray * directoryContents = [[NSFileManager defaultManager]
contentsOfDirectoryAtPath:documentsDirectory error:&error];
NSLog(@"directoryContents ====== %@",directoryContents);
Swift 버전 :
if let files = try? FileManager.default.contentsOfDirectory(atPath: Bundle.main.bundlePath ){
for file in files {
print(file)
}
}
디렉토리의 모든 파일 나열
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
NSArray *contents = [fileManager contentsOfDirectoryAtURL:bundleURL
includingPropertiesForKeys:@[]
options:NSDirectoryEnumerationSkipsHiddenFiles
error:nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension ENDSWITH '.png'"];
for (NSString *path in [contents filteredArrayUsingPredicate:predicate]) {
// Enumerate each .png file in directory
}
디렉터리의 파일을 재귀 적으로 열거
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:bundleURL
includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey]
options:NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:^BOOL(NSURL *url, NSError *error)
{
NSLog(@"[Error] %@ (%@)", error, url);
}];
NSMutableArray *mutableFileURLs = [NSMutableArray array];
for (NSURL *fileURL in enumerator) {
NSString *filename;
[fileURL getResourceValue:&filename forKey:NSURLNameKey error:nil];
NSNumber *isDirectory;
[fileURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil];
// Skip directories with '_' prefix, for example
if ([filename hasPrefix:@"_"] && [isDirectory boolValue]) {
[enumerator skipDescendants];
continue;
}
if (![isDirectory boolValue]) {
[mutableFileURLs addObject:fileURL];
}
}
NSFileManager에 대한 자세한 내용은 여기
Swift 3 (및 반환 URL)
let url = Bundle.main.resourceURL!
do {
let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles)
} catch {
print(error)
}
스위프트 4 :
"Relative to project" (파란색 폴더) 하위 디렉토리와 관련하여 다음과 같이 작성할 수 있습니다.
func getAllPListFrom(_ subdir:String)->[URL]? {
guard let fURL = Bundle.main.urls(forResourcesWithExtension: "plist", subdirectory: subdir) else { return nil }
return fURL
}
사용법 :
if let myURLs = getAllPListFrom("myPrivateFolder/Lists") {
// your code..
}
참고 URL : https://stackoverflow.com/questions/6398937/getting-a-list-of-files-in-the-resources-folder-ios
반응형
'Programing' 카테고리의 다른 글
어셈블리 언어를 배우는 것이 가치가 있습니까? (0) | 2020.09.20 |
---|---|
Text Watcher를 트리거하지 않고 EditText 텍스트를 어떻게 변경할 수 있습니까? (0) | 2020.09.20 |
R에서 상관 행렬을 어떻게 만들 수 있습니까? (0) | 2020.09.20 |
터미널 Mac OS X에서 원격으로 SSH SCP 로컬 파일 (0) | 2020.09.20 |
문자열에서 영숫자가 아닌 모든 문자 교체 (0) | 2020.09.20 |