iPhone初心者ですが、
ドキュメント ディレクトリにいくつのフォルダーがあるかを確認したいのですが、すべてのフォルダーの名前を取得して、それを配列に保存したいと考えています。
フォルダー内のコンテンツではなく、フォルダーの名前のみが必要です。
どんな助けでも大歓迎です。
iPhone初心者ですが、
ドキュメント ディレクトリにいくつのフォルダーがあるかを確認したいのですが、すべてのフォルダーの名前を取得して、それを配列に保存したいと考えています。
フォルダー内のコンテンツではなく、フォルダーの名前のみが必要です。
どんな助けでも大歓迎です。
NSFileManager *mgr = [NSFileManager defaultManager];
NSString *documentsDir [NSSearchPathsForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSArray *allFilesInDocuments = [mgr contentsOfDirectoryAtPath:documentsDir error:NULL];
NSMutableArray *found = [NSMutableArray array];
for (NSString *filename in allFilesInDocuments)
{
NSString *fullPath = [documentsDir stringByAppendingPathComponent:filename];
BOOL isDir;
[mgr fileExistsAtPath:fullPath isDirectory:&isDir];
if (isDir) [found addObject:fullPath]; // or filename
}
これfound
で、Documentsディレクトリのサブディレクトリのすべてのパス/名前(つまり、ディレクトリ自体であるDocumentsディレクトリ内のエントリ)が含まれるはずです。
#define rootFileName XXXXXXXX
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *yourDirectory = [documentsDirectory stringByAppendingPathComponent:rootFileName];
//fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组
NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:yourDirectory error:nil];
for(int i = 0; i < [fileList count]; i++)
{
NSString *fileName = [fileList objectAtIndex:i];
NSLog(@"yourFileName:%@",fileName);
if([fileName isEqualToString:@".DS_Store"])
{
NSString *dotDS_StorePath = [NSString stringWithFormat:@"%@/.DS_Store",yourDirectory];
[[NSFileManager defaultManager] removeItemAtPath:dotDS_StorePath error:nil];
}
}
知っておくべきことが1つあります。fileListsには.DS_Storeというファイルがあります。ファイルはOSによって作成されます。
これを行う:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *fileList = [[fileManager directoryContentsAtPath:yourDocumentPath] retain]; // your path here instead (DOCUMENTS_FOLDER)
NSMutableArray *directoryList = [[NSMutableArray alloc] init];
for(NSString *file in fileList) {
NSString *path = [yourDocumentPath stringByAppendingPathComponent:file]; // create path for directory and check it exits or not as directory
BOOL isDir = NO;
[fileManager fileExistsAtPath:path isDirectory:(&isDir)];
if(isDir) {
[directoryList addObject:file];
}
}
NSLog(@"%@", directoryList);
最も簡単な方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *manager = [NSFileManager defaultManager];
NSArray *imageFilenames = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
for (int i = 0; i < [imageFilenames count]; i++)
{
NSString *imageName = [NSString stringWithFormat:@"%@/%@",documentsDirectory,[imageFilenames objectAtIndex:i] ];
if (![[imageFilenames objectAtIndex:i]isEqualToString:@".DS_Store"])
{
NSLog(@"\n %@",imageName);
}
}
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSArray *filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory error:nil];
NSLog(@"files array %@", filePathsArray);
NSFileManagerクラスを見てください
メソッドが必要なようです。subpathsAtPath:
ここにサンプルコードがあります
BOOL isDir=NO;
NSArray *subpaths;
NSString *fontPath = @"/System/Library/Fonts";
NSFileManager *fileManager = [[NSFileManager alloc] init];
if ([fileManager fileExistsAtPath:fontPath isDirectory:&isDir] && isDir)
subpaths = [fileManager subpathsAtPath:fontPath];
[fileManager release];