2011-12-04 98 views
53

我已經建立了下面的代碼將文件保存到文件目錄:在UITableView的iOS文檔目錄中列出保存的文件?

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

我該怎麼做?

回答

138

這裏是我用來獲取目錄內容的方法。

-(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; 
} 
+0

謝謝,但我怎麼把這個數據放到UITableView然後在UIWebView中打開文件? – pixelbitlabs

+1

這是一個很好的[UITableView](http://www.iosdevnotes.com/2011/10/uitableview-tutorial/)教程,這裏是[xcode project]的鏈接(https://github.com/cwalcott/UITableView-Tutorial)。這是關於[UIWebView](http://www.iphonesdkarticles.com/2008/08/uiwebview-tutorial.html) – syclonefx

+0

的一個很好的教程謝謝你。我知道如何創建一個UITableView等,但不知道如何將文件實際上到UITableView本身。你發送的網站並沒有真正提到: – pixelbitlabs

11

爲了得到一個目錄

- (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] 
+0

謝謝,但我如何將這些數據放入UITableView中,然後在UIWebView中打開該文件?此外,「[[path pathComponents] lastObject]」不會獲得文件類型的完整文件名(例如「.gif」而不是「test.gif」),那麼我能做些什麼來獲得「test.gif」? – pixelbitlabs

+2

我建議閱讀UITableViews。全長教程並不真的會發生在堆棧溢出 – coneybeare

+0

但@coneybeare - 你沒有提到任何回覆關於文件類型的評論。我也熱衷於這樣做。你能指出我正確的方向嗎? – pixelbitlabs

19
-(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; } 

上面的例子是不言自明。我希望它回答你第二個問題。

+0

謝謝,但這不是我真正要求的。我不想找到多個文件名,我只是想刪除http://www.domain.com/,所以我在最後留下了「file.suffix」位。當然有更快的方法來做到這一點? – pixelbitlabs

+0

@Mike Martin你的回答給了我一個解決我現在面臨的問題的想法。謝謝。 P.S.還有一件事,如果我需要添加可能具有以下集合的擴展名的「匹配」文件(對象):@「txt」,@「pdf」,@「doc」,@「rtf」,@ 「png」,@「jpeg」? – eugen

4

爲了更合理的文件名:

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

4

我知道這是一個老問題,但它是一個很好的事情,並已經在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; 
} 
8

感謝亞歷克斯,

這是斯威夫特版本

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) 
    } 
} 
1
NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:dir_path]; 

NSString *filename; 

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

通過的所有文件目錄

1

斯威夫特3枚舉。x

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

如何從「文件/收件箱」中獲取文件列表?並選擇任何一個。 –

相關問題