2011-05-03 3 views
2
내가 defaultRepresentation URL을 항상 0x0를 반환하는 것 같다 자산을 사용하여 아이폰 OS

아이폰 OS ALAssetsLibrary 및 NSFileHandle 읽기 파일 내용

NSFileHandle fileHandleForReadingFromUrl에 자산 라이브러리 파일의 내용을 읽을 수

... 내가 계속 찾고 있습니다

평균 시간 안에 해결책을 위해.

편집 :

내가 원하는 것을 할 수 Anomie에서 답 것 같은데 : 당신은 아마 청크 X 바이트를 읽어 루프를 통해 밖으로 복사 할 큰 파일의 경우

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

+0

Anomie의 대답은 아마도 작은 비디오에서는 효과가 있지만 큰 비디오를 다루는 경우에는 청크로 복사해야 할 것입니다. 아래 답변을 참조하십시오 –

답변

9

, 그렇지 않으면 장치 메모리가 고갈 될 수 있습니다.

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

@Adam - 가로 막대가 표시되지 않도록 코드를 편집하여 (왼쪽 및 오른쪽으로 스크롤하는 대신 한 번에 코드를 볼 수 있도록) 코드를 편집하고 싶었습니다. 이전에 일부 줄 문자를 사용할 수 없습니다. :) 그러나 그것은 너무 많은 불편 함이 있어서는 안됩니다. :) 그래서 코드 섹션을 XCode 편집기처럼 만들 수 있었으면 좋겠어 :) 어쨌든 추가 편집을 주셔서 감사합니다. – Viren

+0

@Viren : 나는 그곳에서 무슨 일이 일어 났는지 모르겠다. 그러나 내 추측으로는 코드의 일부분이 올바르게 들여 쓰기되지 않았기 때문에 (그리고 코드로 표시되지 않은) 이전 버전의 답을 보았고, 그것은 두 번째 편집을 밟았습니다. –