2014-09-21 60 views
0

我已經搜索了約3小時如何獲取文件的創建日期,我得到了一個枚舉器的URL,之後,我將它傳遞給路徑糾正最後我試圖獲取文件屬性...所以,我不會改變路徑,但我總是得到相同的錯誤「操作無法完成,沒有這樣的文件或目錄」,路徑「文件:///Users/raul/Desktop/DSC_0386.JPG」。獲取nsfilesustem文件屬性在可可沒有這樣的文件存在

的代碼示例:

NSError* error = nil; 
//NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:[[url absoluteString] stringByRemovingPercentEncoding] error:&error]; 
NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:@"file://Users/raul/Desktop/DSC_0386.JPG" error:&error]; 
NSLog(@"%@",error); 
NSDate *fecha = [fileAttribs objectForKey:NSFileCreationDate]; 

我評論第一NSDictionary的嘗試第二條語句直接NSString的。

我檢查過我的文件已經存在。

請幫忙嗎?我錯過了什麼?

回答

2

幾個問題:

1)在大多數情況下,你不應該有一個NSURL轉換爲路徑字符串以上的文件進行操作。特別是,你可以使用的NSURL「資源價值」 API直接獲得創建時間:

NSDate* creationDate; 
NSError* error; 
if ([url getResourceValue:&creationDate forKey:NSURLCreationDateKey error:&error]) 
    /* use creationDate */; 
else 
    /* handle error */; 

2)如果您確實需要從NSURL得到一個路徑字符串,請不要使用-absoluteString。這仍然是一個URL字符串,例如「file://」等。URL字符串不是有效的路徑字符串。你在問題中引用的錯誤消息已經告訴你這一點。它向你展示了一個「file:///Users/raul/Desktop/DSC_0386.JPG」的文件「路徑」,但這根本不是路徑。

您應該只使用-path方法。當您獲得-path時,您無需使用百分比編碼進行任何操作。

3)在檢查你調用的方法成功還是失敗之前,你應該忽略任何錯誤輸出參數,通常通過檢查它的返回值。也就是說,你發佈的代碼應該像這樣重組:

NSError* error = nil; 
NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:@"file://Users/raul/Desktop/DSC_0386.JPG" error:&error]; 
if (fileAttribs) 
{ 
    NSDate *fecha = [fileAttribs objectForKey:NSFileCreationDate]; 
    // ... use fecha ... 
} 
else 
    NSLog(@"%@",error); 
+0

謝謝,我幾分鐘前創建了相同的第二部分答案。我要去嘗試第一場。在第三部分中,錯誤日誌就是在那裏知道我在開發過程中遇到的錯誤。非常感謝你 – raululm 2014-09-21 23:45:45

相關問題