다른 것들 중에서 0으로 채워진 파일을 저장해야하는 코드 작업 중입니다. 10MB에서 1GB 공백까지 파일을 생성 할 것으로 예상됩니다.Objective-C에 빈 파일 저장
이 유닉스 명령과 유사합니다
dd if=/dev/zero of=my_image.dsk count=20480
내가 작은 크기의이 하나의 작업을 할 수있는 :
int totalSize = 1024*1024;
char buf[totalSize];
strcpy(buf,"");
NSData *theData = [NSData dataWithBytes:buf length:sizeof(buf)];
//NSLog(@"%@", theData);
NSLog(@"%lu", sizeof(buf));
[theData writeToFile:@"/Users/foo/Desktop/my_image.dsk" atomically:YES];
을하지만 더 큰 값을 시도하는 경우 (1024 * 1024 * 10 예를 들어), 충돌합니다. 그래서 나는 시도 :
NSFileManager *ddd = [[NSFileManager alloc ] init];
[ddd createFileAtPath:@"/Users/foo/Desktop/my_image.dsk" contents:[NSData data] attributes:nil];
그것은 빈 파일을 만들지 만 파일 크기가 0이기 때문에 좋지 않다. 0이 아니어야합니다.
나는 성공하지 못한 채 몇 시간을 보냈다. Obj-C에서이 작업을 수행하려고하지만, C가 옵션이되기 전에야 견해를 나타냅니다.
제발 누군가 제게 빛을주세요!
미리 감사드립니다.
- 편집 -
모두에게 감사하지만, 한 가지 더 : 메모리에있는 모든 할당하지 않고이 가능를 작성하려면?
스택에 할당하기 때문에 충돌이 발생합니다. 스택에 제한된 메모리가 있습니다. 스택에 1 MB를 그대로 할당하려고하면 malloc 및 memset 호출을 사용하는 것이 좋습니다. –
@ RichardJ.RossIII : 일반적으로'malloc'과'memset'은 사용하지 말고'calloc'을 대신 사용하십시오. 그렇게 많은 메모리를 절약 할 수 있습니다. –
@DietrichEpp 정말요? 다른 방법을 들었습니다. 그리고 memset이 calloc 호출보다 낫습니다. 왜냐하면 더 많이 인라인되어 있기 때문입니까? 내가들은 바로는 나중에 어느쪽으로도 말할 수 없다. –