Войти
iPhoneФорумПрограммирование

URL - поиск файлов

#0
15:44, 8 июня 2011

привет всем!
хочу получить имена всех файлов в директории по данному URL, ,
что бы фильтровать, загружать их в NSDictionary или NSArray и дальше с ними
работать, какими средствами проще сделать?

#1
17:27, 8 июня 2011

Если речь идет об фтп, можно использовать такую схему.

data_ = [[NSMutableData alloc] init];  // data_ это ivar
NSURLConnection *conn = [NSURLConnection connectionWithRequest:
               [NSURLRequest requestWithURL:
                [NSURL URLWithString:@"ftp://user:/path/to/dir/"]] delegate:self];
[conn start];

// ...

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
  [data_ appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  NSLog(@"connection did finish; bytes received %u", [data_ length]);
  
  NSString *dataString = [[[NSString alloc] initWithData:data_ encoding:NSUTF8StringEncoding] autorelease];
  NSLog(@"received data: %@", dataString);
  
  NSMutableArray  *newEntries = [NSMutableArray array];
  NSUInteger    offset = 0;
  
  do {
    CFIndex      bytesConsumed;
    CFDictionaryRef  thisEntry;
    
    thisEntry = NULL;
    
    assert(offset <= data_.length);
    bytesConsumed = CFFTPCreateParsedResourceListing(NULL, &((const uint8_t *)data_.bytes)[offset],
                             data_.length - offset, &thisEntry);
    if (bytesConsumed > 0) {
      if (thisEntry != NULL) {
        [newEntries addObject:(NSDictionary *)thisEntry];
      }
      offset += bytesConsumed;
    }
    
    if (thisEntry != NULL) CFRelease(thisEntry);
    
    if (bytesConsumed == 0) {
      // Пока что было загружено недостаточно данных, подождем еще
      break;
    } else if (bytesConsumed < 0) {
      // Произошла ошибка
      NSLog(@"Failed to parse directory listing.");
      break;
    }
  } while (YES);
  NSLog(@"%@", newEntries);
}

Этот код немного более универсальный, чем нужно для данного случая, т.к. он работает даже с частично загруженными даннными.


Если же речь идет об http, то там при запросе директории веб-сервер обычно возвращает HTML-страницу.

#2
18:03, 8 июня 2011

спасиб, да универсально и поэтому длинно, хотел покороче,
допустим для работы с диском можно названия фаилов достать так:
....
NSFileManager *manager;
NSDirectoryEnumenator *direnum;
direnum = [manager enumenatorAtPath: (NSString *) path]

а если URL, ftp?

#3
12:46, 9 июня 2011

Более высокоуровневого способа для фтп, кроме как CFFTPCreateParsedResourceListing, не знаю.

Можно попробовать метод NSFileManager'a "enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:". Еще можно спросить на stackoverflow.com

#4
21:55, 9 июня 2011

alcoSHoLiK
> Можно попробовать метод NSFileManager'a
> "enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:"
да, подходит, спасибо!

iPhoneФорумПрограммирование

Тема в архиве.