2011-05-03 13 views
2

我想用資產defaultRepresentation網址似乎總是返回0x0讀取一個資產庫文件中的內容的iOS的iOS ALAssetsLibrary和NSFileHandle讀取文件內容

NSFileHandle fileHandleForReadingFromUrl ......

我將繼續尋找同時尋求解決方案。

編輯:

貌似從Anomie答案可能是什麼,我想:

NSUInteger length = [representation getBytes:bytes fromOffset:0 length:[representation size] error:&error];

+0

Anomie的答案可能適用於小視頻,但如果您正在處理較大的視頻,則可能需要以大塊的形式進行復制。看到我的回答如下 – 2011-05-03 22:55:28

回答

9

對於你可能希望通過一個循環來複製出塊讀取X字節的文件,否則您可能會耗盡設備上的內存。

NSUInteger chunkSize = 100 * 1024; 
uint8_t *buffer = malloc(chunkSize * sizeof(uint8_t)); 

ALAssetRepresentation *rep = [myasset defaultRepresentation]; 
NSUInteger length = [rep size]; 

NSFileHandle *file = [[NSFileHandle fileHandleForWritingAtPath: tempFile] retain]; 

if(file == nil) { 
    [[NSFileManager defaultManager] createFileAtPath:tempFile contents:nil attributes:nil]; 
    file = [[NSFileHandle fileHandleForWritingAtPath:tempFile] retain]; 
} 

NSUInteger offset = 0; 
do { 
    NSUInteger bytesCopied = [rep getBytes:buffer fromOffset:offset length:chunkSize error:nil]; 
    offset += bytesCopied; 
    NSData *data = [[NSData alloc] initWithBytes:buffer length:bytesCopied]; 
    [file writeData:data]; 
    [data release]; 
    } while (offset < length); 

[file closeFile]; 
[file release]; 
free(buffer); 
buffer = NULL; 
+0

@亞當 - 我想編輯代碼,使橫條不會顯示出來(這樣我就可以一次查看代碼,而不是左右滾動),所以我放了一些下一代代碼,早些時候在一些loc中的行字符。 :)但是,我猜不應該太多不便。 :)我希望SO會使代碼部分像XCode編輯器:)謝謝反正進一步編輯。 – Viren 2014-01-30 06:46:38

+0

@Viren:我不知道那裏發生了什麼,但我的猜測是,我看到答案的前一版本中代碼的一部分沒有正確縮進(因此未標記爲代碼),並且當我糾正錯誤時,它踩在你的第二個編輯。 – 2014-01-30 10:49:25