iOSドキュメントディレクトリに保存されたファイルをuitableviewにリストしますか?

StackOverflow https://stackoverflow.com/questions/8376511

質問

ファイルをドキュメントディレクトリに保存するために、次のコードを設定しました。

NSLog(@"Saving File...");

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.reddexuk.com/logo.png"]];
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"logo.png"];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

[operation start];

ただし、それが正常に保存されたときに、各ファイルをuitableviewに追加したいと思います。 UitableViewのファイルがタップされたら、UIWeBViewをそのファイル(すべてオフライン)に移動させたいと思います。

また - ではなく「logo.png」などのファイル名と終了を取得するにはどうすればよいですか http://www.reddexuk.com/logo.png?

これどうやってするの?

役に立ちましたか?

解決

ディレクトリのコンテンツを取得するために使用する方法は次のとおりです。

-(NSArray *)listFileAtPath:(NSString *)path
{
    //-----> LIST ALL FILES <-----//
    NSLog(@"LISTING ALL FILES FOUND");

    int count;

    NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL];
    for (count = 0; count < (int)[directoryContent count]; count++)
    {
        NSLog(@"File %d: %@", (count + 1), [directoryContent objectAtIndex:count]);
    }
    return directoryContent;
}

他のヒント

-(NSArray *)findFiles:(NSString *)extension{

NSMutableArray *matches = [[NSMutableArray alloc]init];
NSFileManager *fManager = [NSFileManager defaultManager];
NSString *item;
NSArray *contents = [fManager contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] error:nil];

// >>> this section here adds all files with the chosen extension to an array
for (item in contents){
    if ([[item pathExtension] isEqualToString:extension]) {
        [matches addObject:item];
    }
}
return matches; }

上記の例は、かなり自明です。 2番目の質問に答えることを願っています。

ディレクトリの内容を取得します

- (NSArray *)ls {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory];

    NSLog(@"%@", documentsDirectory);
    return directoryContent;
}

最後のパスコンポーネントを取得するには、

[[path pathComponents] lastObject]

アレックスに感謝します、

これがSwiftバージョンです

func listFilesOnDevice() {

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentDirectory = paths[0] as! String
    let manager = NSFileManager.defaultManager()
    if let allItems = manager.contentsOfDirectoryAtPath(documentDirectory, error: nil) {
        println(allItems)
    }
}

私はこれが古い質問であることを知っていますが、それは良いものであり、サンドボクシング後のiOSで状況が変わりました。

アプリ内のすべての読み取り可能/書き込み可能なフォルダーへのパス 意思 今、ハッシュが入っていて、Appleはいつでもそのパスを変更する権利を留保します。これ 意思 確かにすべてのアプリの起動で変更されます。

必要なフォルダーへのパスを取得する必要があります。過去にできるように、ハードコード化することはできません。

ドキュメントディレクトリを要求し、返信配列では位置0にあります。そこから、その値を使用してnsfilemanagerに供給してディレクトリコンテンツを取得します。

以下のコードは、iOS 7および8で動作し、ドキュメントディレクトリ内のコンテンツの配列を返します。あなた自身の好みに応じてそれを並べ替えたいかもしれません。

+ (NSArray *)dumpDocumentsDirectoryContents {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];

    NSError *error;
    NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];

    NSLog(@"%@", directoryContents);
    return directoryContents;
}

より合理的なファイル名のために:

NSString *filename = [[url lastPathComponent] stringByAppendingPathExtension:[url pathExtension]];

NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:dir_path];

NSString *filename;

while ((filename = [dirEnum nextObject]))
{
    // Do something amazing
}

ディレクトリ内のすべてのファイルを介して列挙するため

Swift 3.x

let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
if let allItems = try? FileManager.default.contentsOfDirectory(atPath: documentDirectory) {
  print(allItems)
}

Swift 5

MP4ビデオであるドキュメントディレクトリ内のすべてのファイルのURLの配列を返す関数。すべてのファイルが必要な場合は、削除するだけです filter.

上部ディレクトリ内のファイルのみをチェックします。サブディレクトリのファイルもリストする場合は、 .skipsSubdirectoryDescendants オプション。

func listVideos() -> [URL] {
    let fileManager = FileManager.default
    let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]

    let files = try? fileManager.contentsOfDirectory(
        at: documentDirectory,
        includingPropertiesForKeys: nil,
        options: [.skipsSubdirectoryDescendants, .skipsHiddenFiles]
    ).filter {
        $0.lastPathComponent.hasSuffix(".mp4")
    }

    return files ?? []
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top