您的位置:首页 > 其它

创建一个写入流写入一个文件到程序的临时目录里

2013-11-11 15:53 344 查看
先获得写入的路径:

self.filePath = [[NetworkManager sharedInstance] pathForTemporaryFileWithPrefix:@"Get"];


- (NSString *)pathForTemporaryFileWithPrefix:(NSString *)prefix
{
NSString *  result;
CFUUIDRef   uuid;
CFStringRef uuidStr;

uuid = CFUUIDCreate(NULL);
assert(uuid != NULL);

uuidStr = CFUUIDCreateString(NULL, uuid);
assert(uuidStr != NULL);

result = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@", prefix, uuidStr]];
assert(result != nil);

CFRelease(uuidStr);
CFRelease(uuid);

return result;
}


创建写入流,并打开流

assert(self.filePath != nil);

self.fileStream = [NSOutputStream outputStreamToFileAtPath:self.filePath append:NO];
assert(self.fileStream != nil);

[self.fileStream open];


发送url请求

request = [NSURLRequest requestWithURL:url];
assert(request != nil);

self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
assert(self.connection != nil);


实现代理方法,将文件写入到临时目录

- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)data
{
#pragma unused(theConnection)
NSInteger       dataLength;
const uint8_t * dataBytes;
NSInteger       bytesWritten;
NSInteger       bytesWrittenSoFar;

assert(theConnection == self.connection);

dataLength = [data length];
dataBytes  = [data bytes];

bytesWrittenSoFar = 0;
do {
bytesWritten = [self.fileStream write:&dataBytes[bytesWrittenSoFar] maxLength:dataLength - bytesWrittenSoFar];
assert(bytesWritten != 0);
if (bytesWritten == -1) {
[self stopReceiveWithStatus:@"File write error"];
break;
} else {
bytesWrittenSoFar += bytesWritten;
}
} while (bytesWrittenSoFar != dataLength);
}


还有写代理方法也要去实现,例如:

- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection

- (void)connection:(NSURLConnection *)theConnection didFailWithError:(NSError *)error

- (void)connection:(NSURLConnection *)theConnection didReceiveResponse:(NSURLResponse *)response
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐