(转载)多线程下文件

(转载自COCOACHINA)

  1 NSString*FDownLoadDefaultFile;   //下载异常状态的默认文件
2 NSString*FDownLoadLocalFilePath; //下载到本地的保存路径
3 NSIntegerFDownLoadFileCount; //当前下载的文件总数
4 NSInteger FDownLoadID; //下载序列ID
5
6
7 NSMutableArray*FDownLoadFileArr; //下载到本地的文件
8 NSMutableArray*FDownLoadNetworkFilePathArr; //需要下载到本地的网络文件路径
9
10 NSCondition*FDownloadLockCondition; //线程锁
11
12
13
14 //下载文件
15 //多线程下载文件
16 -(void)DownloadFileByThread : (NSArray *)AFileArr //需要下载的文件集合数组
17 ADownloadDirPath : (NSString *)ADownloadFilePath //需要下载到本地的目录路径,结尾为“/”
18 ADownloadDefaultFileURL : (NSString *)ADownloadDeaultFileURL; //如果需要下载的文件不存在,则需要下载的默认文件
19 //下载主线程
20 -(void)DownloadMainThread : (NSArray *)ADataArr; //传递到线程中的数据集合,
21 //位置0=本地下载目录
22 //位置1=下载文件地址
23 //位置2=默认下载文件
24 //位置3=文件所属的位置索引号
25
26
27
28
29 .m
30
31
32 -(void)SetDownloadFileID : (NSInteger)AID {
33 FDownLoadID= AID;
34 }
35
36
37 -(void)DownloadFileByThread : (NSArray *)AFileArr
38 ADownloadDirPath : (NSString *)ADownloadFilePath
39 ADownloadDefaultFileURL : (NSString *)ADownloadDeaultFileURL {
40 NSInteger AFileCount = [AFileArr count];
41 NSString *ALocalFile = ADownloadFilePath;
42 NSString *AFileName;
43 NSString *AFileURL;
44 NSString *ADefaultFile;
45 NSMutableArray*ADataArr;
46
47 [[NSURLCachesharedURLCache] removeAllCachedResponses];
48 FDownLoadNetworkFilePathArr= [[NSMutableArrayalloc] initWithArray:AFileArr];
49 FDownLoadFileArr = [[NSMutableArray alloc] initWithCapacity:AFileCount];
50 FDownLoadFileCount= 0;
51 FDownloadLockCondition= [[NSConditionalloc] init];
52
53 for (int i = 0; i < AFileCount; i++) {
54 [FDownLoadFileArraddObject:@""];
55 }
56
57
58 for (int i = 0; i < AFileCount; i++) {
59 AFileURL = [[NSString alloc] initWithString: [AFileArr objectAtIndex : i]];
60 AFileName = [ALocalFile stringByAppendingString:[self GetFileName:AFileURL]];
61
62 ADataArr = [[NSMutableArray alloc] initWithCapacity:3];
63 [ADataArr addObject:ALocalFile];
64 if([[NSFileManagerdefaultManager] fileExistsAtPath:AFileName] == NO) {
65 //NSLog(@"%@",AFileURL);
66 [ADataArr addObject:AFileURL];
67 [ADataArr addObject:ADownloadDeaultFileURL];
68 [ADataArr addObject:[[NSStringalloc] initWithFormat:@"%d",i]];
69
70 [NSThreaddetachNewThreadSelector:@selector(DownloadMainThread:) toTarget:selfwithObject:ADataArr];
71 [ADataArr release];
72 }
73 else {
74 //NSLog(@"%@",AFileName);
75 if (AFileURL == @"") {
76 ADefaultFile = [ALocalFile stringByAppendingString:[self GetFileName:ADownloadDeaultFileURL]];
77 if ([[NSFileManager defaultManager] fileExistsAtPath:ADefaultFile] == NO) {
78 [ADataArr addObject:ADownloadDeaultFileURL];
79 [ADataArr addObject:ADownloadDeaultFileURL];
80 [ADataArr addObject:[[NSStringalloc] initWithFormat:@"%d",i]];
81 [NSThreaddetachNewThreadSelector:@selector(DownloadMainThread:) toTarget:selfwithObject:ADataArr];
82 [ADataArr release];
83 }
84 else {
85 FDownLoadFileCount++;
86 [FDownLoadFileArrreplaceObjectAtIndex:i withObject:ADefaultFile];
87 //[FDownLoadFileArr addObject:ADefaultFile];
88 }
89 }
90 else {
91 FDownLoadFileCount++;
92 [FDownLoadFileArrreplaceObjectAtIndex:i withObject:AFileName];
93 //[FDownLoadFileArr setValue:AFileName forKey:[[NSString alloc] initWithFormat:@"%d",i]];
94 //[FDownLoadFileArr addObject:AFileName];
95 }
96
97
98 }
99
100
101
102 }
103 if(FDownLoadFileCount== [FDownLoadNetworkFilePathArrcount]) { //完成全部下载
104 [self.delegate DownLoadFileDidFinish:FDownLoadFileArr AID : FDownLoadID];
105 [FDownLoadNetworkFilePathArrrelease];
106 [FDownLoadFileArrrelease];
107 [FDownloadLockConditionrelease];
108
109 }
110 }
111
112
113 -(void)DownloadMainThread : (NSArray *)ADataArr {
114 NSString *ALocalFile = [ADataArr objectAtIndex:0];
115 //NSLog(@"%@",[ADataArr objectAtIndex:1]);
116 NSURL*AURL = [[NSURLalloc] initWithString:[ADataArr objectAtIndex:1]];
117 NSData *AFileData = [[NSData alloc] initWithContentsOfURL:AURL];
118 if (AFileData != nil) {
119 ALocalFile = [ALocalFile stringByAppendingString:[self GetFileName:[ADataArr objectAtIndex:1]]];
120 //NSLog(@"%@",ALocalFile);
121 [AFileData writeToFile:ALocalFile atomically:YES];
122 }
123 else{ //不存在指定路径的文件,使用默认文件
124 NSString *ADefaultFile = [ALocalFile stringByAppendingString:[self GetFileName:[ADataArr objectAtIndex:2]]];
125 if ([[NSFileManager defaultManager] fileExistsAtPath:ADefaultFile] == NO) {
126 [AURL release];
127 [AFileData release];
128 AURL = [[NSURLalloc] initWithString:[ADataArr objectAtIndex:2]];
129 AFileData = [[NSData alloc] initWithContentsOfURL:AURL];
130 if (AFileData != nil) {
131 ALocalFile = [ALocalFile stringByAppendingString:[self GetFileName:[ADataArr objectAtIndex:1]]];
132 [AFileData writeToFile:ALocalFile atomically:YES];
133 }
134 else {
135 ALocalFile = [DocumentPathstringByAppendingString:@"default.png"];
136 }
137
138
139 }
140
141 }
142 //NSLog(@"ADataArr = %@",[ADataArr objectAtIndex:3]);
143 [FDownloadLockConditionlock]; //上锁
144 FDownLoadFileCount++;
145 [FDownLoadFileArrreplaceObjectAtIndex:[[ADataArr objectAtIndex:3] intValue] withObject:ALocalFile];
146 [FDownloadLockConditionunlock]; //解锁
147
148 [AURL release];
149 [ALocalFile release];
150 [AFileData release];
151
152
153 if(FDownLoadFileCount== [FDownLoadNetworkFilePathArrcount]) { //完成全部下载
154 [self.delegate DownLoadFileDidFinish:FDownLoadFileArr AID : FDownLoadID];
155 [FDownLoadNetworkFilePathArrrelease];
156 [FDownLoadFileArrrelease];
157 [FDownloadLockConditionrelease];
158
159 }
160 }

posted on 2011-07-25 17:01  east520  阅读(218)  评论(0)    收藏  举报

导航