JoinFileDir.mm 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. //
  2. // JoinFileDir.m
  3. // JOINFILE
  4. //
  5. // Created by 杜家兑 on 14/12/31.
  6. // Copyright (c) 2014年 mac. All rights reserved.
  7. //
  8. #import "JoinFileDir.h"
  9. #include "JoinFile.h"
  10. #import "ZGSynthesizeSingleton.h"
  11. #import "ZGFileUtils.h"
  12. #import "ZGJsonUtils.h"
  13. #import <CommonCrypto/CommonDigest.h>
  14. #define NSTR(format,...) [NSString stringWithFormat:format,__VA_ARGS__]
  15. #define DDLOG(...) NSLog(__VA_ARGS__)
  16. #define FMGR [NSFileManager defaultManager]
  17. #define LaJiYinXiao_PATH @"/Users/dujiadui/work/UUTDATA/lajiyinxiao/"
  18. @implementation JoinFileDir
  19. static NSString* music_fileName=@"";
  20. static NSString* _projectPath=@"";
  21. static NSString* _srcPath=@"";
  22. static NSString* _goalPath=@"";
  23. static NSMutableArray* _maUsedFileName=[[NSMutableArray alloc] init];
  24. ZG_SYNTHESIZE_SINGLETON_FOR_CLASS(JoinFileDir);
  25. -(NSString *)randString:(int)_yushu weishu:(int)_weishu{
  26. NSString *rs = @"";
  27. int len=arc4random() %_yushu+_weishu;
  28. NSArray *array=[NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z",nil];
  29. for (int i=0; i<len; i++) {
  30. int arryKey = arc4random() % [array count];
  31. NSString *let=[array objectAtIndex:arryKey];
  32. rs = [let stringByAppendingString:rs];
  33. }
  34. return rs;
  35. }
  36. -(void)cearteSomeFile:(NSString *)assertPath fileCount:(int)_filecount{
  37. for (int i=0; i<_filecount; i++) {
  38. NSString *fileName=[self randString:10 weishu:10];
  39. NSString *fileContent = [self randString:50 weishu:10];
  40. // save
  41. NSString *filePath = [NSString stringWithFormat:@"%@/%@.txt", assertPath,fileName];
  42. [fileContent writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
  43. }
  44. }
  45. //-(void)cearteSomeMusicAssetFile{
  46. // //丢垃圾小音效文件
  47. // NSString *lajiyinxiaoPath = [NSString stringWithFormat:@"%@", LaJiYinXiao_PATH];
  48. // NSArray *lajiyinxiaoPaths = [ZGFileUtils filesInDirectory:lajiyinxiaoPath];
  49. // long countFiles=[lajiyinxiaoPaths count];
  50. // int randKey=arc4random() % countFiles;
  51. // [ZGFileUtils copyFileFromPath:[lajiyinxiaoPaths objectAtIndex:randKey] toPath:_srcPath];
  52. //}
  53. //
  54. //-(void)addSomeFileToAssets{
  55. // [self cearteSomeMusicAssetFile];
  56. // //向assert下的子目录丢随机垃圾文件夹
  57. // NSArray *allDir=[ZGFileUtils directorysAtDirRecursion:_srcPath];
  58. // for (NSString *dirPath in allDir) {
  59. // //如果目录没有10个文件则丢1垃圾文件到10个
  60. // NSArray *allfiles=[ZGFileUtils filesInDirectory:dirPath];
  61. // if ([allfiles count]<10) {
  62. // int needfilesNum=(int)(10-[allfiles count]);
  63. // [self cearteSomeFile:[NSString stringWithFormat:@"%@",dirPath] fileCount:needfilesNum];
  64. // }
  65. // //向目录下丢随机个目录(目录下包含5个随机文件)
  66. // int newDirNum=arc4random() % 3+1;
  67. // for (int i=0; i<newDirNum; i++) {
  68. // NSString *lajiDir=[self randString:10 weishu:4];
  69. // [ZGFileUtils createDirectoryIfNotExist:[NSString stringWithFormat:@"%@/%@",dirPath,lajiDir]];
  70. // [self cearteSomeFile:[NSString stringWithFormat:@"%@/%@",dirPath,lajiDir] fileCount:5];
  71. // }
  72. // NSLog(@"%@",dirPath);
  73. // }
  74. // //向assert根目录丢随机垃圾文件夹
  75. // int newRootDirNum=arc4random() % 3+1;
  76. // for (int i=0; i<newRootDirNum; i++) {
  77. // NSString *lajiDir=[self randString:10 weishu:4];
  78. // [ZGFileUtils createDirectoryIfNotExist:[NSString stringWithFormat:@"%@/%@",_srcPath,lajiDir]];
  79. // [self cearteSomeFile:[NSString stringWithFormat:@"%@/%@",_srcPath,lajiDir] fileCount:5];
  80. // }
  81. //}
  82. -(void)joinFileProjectDir:(NSString*)projectPath isIos:(BOOL)_isIos{
  83. _projectPath=[NSString stringWithString:projectPath];
  84. _projectPath = [_projectPath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  85. _srcPath=[NSString stringWithFormat:@"%@/assets",projectPath];
  86. _srcPath = [_srcPath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  87. _goalPath=[NSString stringWithFormat:@"%@/assets_tmp",projectPath];
  88. _goalPath = [_goalPath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  89. [ZGFileUtils deleteFileOrDirectoryAtPath:_goalPath];
  90. [ZGFileUtils createDirectoryIfNotExist:_goalPath];
  91. // [self addSomeFileToAssets];
  92. //开始混淆
  93. [self joinFileByDirRecursion:_srcPath isIos:_isIos];
  94. //把混淆后的assets_tmp文件夹子替换成assets文件夹
  95. // [ZGFileUtils deleteFileOrDirectoryAtPath:[NSString stringWithFormat:@"%@/",_srcPath]];
  96. // [ZGFileUtils moveFileAtPath:[NSString stringWithFormat:@"%@/",_goalPath] toPath:[NSString stringWithFormat:@"%@/",_srcPath]];
  97. }
  98. -(void)joinFileByDirRecursion:(NSString*)dirPath isIos:(BOOL)_isIos{
  99. JoinFile * _joinFile=JoinFile::getInstance();
  100. NSArray *arrFileName_b=[self randFileNameArr];
  101. NSArray *arrFileName_t=[self randFileNameArr];
  102. NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:nil];
  103. for (int i = 0; i < [fileArray count]; i++) {
  104. NSString *oc_filePath = [NSString stringWithFormat:@"%@/%@", dirPath, [fileArray objectAtIndex:i]];
  105. oc_filePath = [oc_filePath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  106. if (![ZGFileUtils pathIsDirectory:oc_filePath]) {
  107. const char* src_filePath = [oc_filePath UTF8String];
  108. NSString * oc_fileName=[oc_filePath lastPathComponent];
  109. NSString *extension=[oc_filePath pathExtension];
  110. NSString * pathBefore=[oc_filePath stringByDeletingLastPathComponent];
  111. NSRange range = [pathBefore rangeOfString:_srcPath];//查找子串,找不到返回NSNotFound 找到返回location和length
  112. // if (range.location != NSNotFound) {
  113. //
  114. // NSLog(@"%ld %ld",range.location, range.length);
  115. //
  116. // }
  117. NSString * ptr2 = [pathBefore substringFromIndex:range.length];
  118. const char* fileExt = [extension UTF8String];
  119. NSString *tarDir=[NSString stringWithFormat:@"%@%@",_goalPath,ptr2];
  120. if (![ZGFileUtils fileExist:tarDir]) {
  121. [ZGFileUtils createDirectoryIfNotExist:tarDir];
  122. }
  123. if (!_isIos&&(!strcmp(fileExt, "mp3")||!strcmp(fileExt, "wav"))){
  124. NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,[self getMusicFileName]];
  125. std::string tar_filePath = [tar_oc_tarFilePath UTF8String];
  126. tar_filePath=tar_filePath+".mp3";
  127. NSString *oc_tmpName=[NSString stringWithFormat:@"%@.%s", [self randFileName],fileExt];
  128. const char* tmpName = [oc_tmpName UTF8String];
  129. _joinFile->doJoinFile(src_filePath,tar_filePath.c_str(),"b",tmpName,[_projectPath UTF8String]);
  130. }
  131. else if (!strcmp(fileExt, "jpg")||!strcmp(fileExt, "png")||!strcmp(fileExt, "ccbi")) {
  132. int arryKey = arc4random() % [arrFileName_b count];
  133. NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,[arrFileName_b objectAtIndex:arryKey]];
  134. std::string tar_filePath = [tar_oc_tarFilePath UTF8String];
  135. tar_filePath=tar_filePath+".ccbi";
  136. NSString *oc_tmpName=[NSString stringWithFormat:@"%@.%s", [self randFileName],fileExt];
  137. const char* tmpName = [oc_tmpName UTF8String];
  138. _joinFile->doJoinFile(src_filePath,tar_filePath.c_str(),"b",tmpName,[_projectPath UTF8String]);
  139. }else if (
  140. !strcmp(fileExt, "txt")
  141. ||!strcmp(fileExt, "lua")
  142. ||!strcmp(fileExt, "fnt")
  143. ||(!_isIos && !strcmp(fileExt, "plist"))
  144. ||!strcmp(fileExt, "json")
  145. ||!strcmp(fileExt, "js")
  146. ){
  147. int arryKey = arc4random() % [arrFileName_t count];
  148. NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,[arrFileName_t objectAtIndex:arryKey]];
  149. std::string tar_filePath = [tar_oc_tarFilePath UTF8String];
  150. tar_filePath=tar_filePath+".lua";
  151. NSString *oc_tmpName=[NSString stringWithFormat:@"%@.%s", [self randFileName],fileExt];
  152. const char* tmpName = [oc_tmpName UTF8String];
  153. _joinFile->doJoinFile(src_filePath,tar_filePath.c_str(),"t",tmpName,[_projectPath UTF8String]);
  154. }
  155. else{
  156. NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,oc_fileName];
  157. [ZGFileUtils copyFileFromPath:oc_filePath toPath:tar_oc_tarFilePath];
  158. }
  159. } else {
  160. [self joinFileByDirRecursion:oc_filePath isIos:_isIos];
  161. }
  162. }
  163. }
  164. -(void)joinFileProjectDirTAO:(NSString*)projectPath isIos:(BOOL)_isIos{
  165. _projectPath=[NSString stringWithString:projectPath];
  166. _projectPath = [_projectPath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  167. _srcPath=[NSString stringWithFormat:@"%@/assets",projectPath];
  168. _srcPath = [_srcPath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  169. _goalPath=[NSString stringWithFormat:@"%@/assets_tmp",projectPath];
  170. _goalPath = [_goalPath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  171. [ZGFileUtils deleteFileOrDirectoryAtPath:_goalPath];
  172. [ZGFileUtils createDirectoryIfNotExist:_goalPath];
  173. // [self addSomeFileToAssets];
  174. //开始混淆
  175. [self joinFileByDirRecursionTAO:_srcPath isIos:_isIos];
  176. //把混淆后的assets_tmp文件夹子替换成assets文件夹
  177. // [ZGFileUtils deleteFileOrDirectoryAtPath:[NSString stringWithFormat:@"%@/",_srcPath]];
  178. // [ZGFileUtils moveFileAtPath:[NSString stringWithFormat:@"%@/",_goalPath] toPath:[NSString stringWithFormat:@"%@/",_srcPath]];
  179. }
  180. -(void)joinFileByDirRecursionTAO:(NSString*)dirPath isIos:(BOOL)_isIos{
  181. JoinFile * _joinFile=JoinFile::getInstance();
  182. NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:nil];
  183. for (int i = 0; i < [fileArray count]; i++) {
  184. NSString *oc_filePath = [NSString stringWithFormat:@"%@/%@", dirPath, [fileArray objectAtIndex:i]];
  185. oc_filePath = [oc_filePath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  186. if (![ZGFileUtils pathIsDirectory:oc_filePath]) {
  187. const char* src_filePath = [oc_filePath UTF8String];
  188. NSString * oc_fileName=[oc_filePath lastPathComponent];
  189. NSString *extension=[oc_filePath pathExtension];
  190. NSString * pathBefore=[oc_filePath stringByDeletingLastPathComponent];
  191. NSRange range = [pathBefore rangeOfString:_srcPath];//查找子串,找不到返回NSNotFound 找到返回location和length
  192. // if (range.location != NSNotFound) {
  193. //
  194. // NSLog(@"%ld %ld",range.location, range.length);
  195. //
  196. // }
  197. NSString * ptr2 = [pathBefore substringFromIndex:range.length];
  198. const char* fileExt = [extension UTF8String];
  199. NSString *tarDir=[NSString stringWithFormat:@"%@%@",_goalPath,ptr2];
  200. if (![ZGFileUtils fileExist:tarDir]) {
  201. [ZGFileUtils createDirectoryIfNotExist:tarDir];
  202. }
  203. if (!_isIos&&(!strcmp(fileExt, "mp3")||!strcmp(fileExt, "wav"))){
  204. NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,[self getMusicFileName]];
  205. // NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,[self randFileName]];
  206. std::string tar_filePath = [tar_oc_tarFilePath UTF8String];
  207. tar_filePath=tar_filePath+".mp3";
  208. NSString *oc_tmpName=[NSString stringWithFormat:@"%@.%s", [self randFileName],fileExt];
  209. const char* tmpName = [oc_tmpName UTF8String];
  210. _joinFile->doJoinFile(src_filePath,tar_filePath.c_str(),"b",tmpName,[_projectPath UTF8String]);
  211. }
  212. else if (!strcmp(fileExt, "jpg")||!strcmp(fileExt, "png")||!strcmp(fileExt, "ccbi")) {
  213. NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,[self randFileName]];
  214. std::string tar_filePath = [tar_oc_tarFilePath UTF8String];
  215. tar_filePath=tar_filePath+".ccbi";
  216. NSString *oc_tmpName=[NSString stringWithFormat:@"%@.%s", [self randFileName],fileExt];
  217. const char* tmpName = [oc_tmpName UTF8String];
  218. _joinFile->doJoinFile(src_filePath,tar_filePath.c_str(),"b",tmpName,[_projectPath UTF8String]);
  219. }else if (
  220. !strcmp(fileExt, "txt")
  221. ||!strcmp(fileExt, "lua")
  222. ||!strcmp(fileExt, "fnt")
  223. ||(!_isIos && !strcmp(fileExt, "plist"))
  224. ||!strcmp(fileExt, "json")
  225. ||!strcmp(fileExt, "js")
  226. ){
  227. NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,[self randFileName]];
  228. std::string tar_filePath = [tar_oc_tarFilePath UTF8String];
  229. tar_filePath=tar_filePath+".lua";
  230. NSString *oc_tmpName=[NSString stringWithFormat:@"%@.%s", [self randFileName],fileExt];
  231. const char* tmpName = [oc_tmpName UTF8String];
  232. _joinFile->doJoinFile(src_filePath,tar_filePath.c_str(),"t",tmpName,[_projectPath UTF8String]);
  233. }
  234. else{
  235. NSString *tar_oc_tarFilePath=[NSString stringWithFormat:@"%@/%@",tarDir,oc_fileName];
  236. [ZGFileUtils copyFileFromPath:oc_filePath toPath:tar_oc_tarFilePath];
  237. }
  238. } else {
  239. [self joinFileByDirRecursion:oc_filePath isIos:_isIos];
  240. }
  241. }
  242. }
  243. -(NSString *)getMusicFileName{
  244. if ([music_fileName isEqual:@""]) {
  245. music_fileName=[self randFileName];
  246. }
  247. return music_fileName;
  248. }
  249. -(NSArray *)randFileNameArr{
  250. int arrLen=arc4random() % 4+4;
  251. NSMutableArray *arrFileName=[NSMutableArray arrayWithCapacity:arrLen];
  252. for (int i=0; i<arrLen; i++) {
  253. NSString *fileName=[self randFileName];
  254. [arrFileName addObject:fileName];
  255. }
  256. return arrFileName;
  257. }
  258. -(NSString *)randFileName{
  259. NSString *fileName = @"";
  260. while (true) {
  261. fileName = [self randStrFileName];
  262. if (![_maUsedFileName containsObject:fileName]) {
  263. [_maUsedFileName addObject:fileName];
  264. break;
  265. }
  266. }
  267. return fileName;
  268. }
  269. -(NSString *)randStrFileName{
  270. NSString *fileName = @"";
  271. int nameLen=arc4random() % 10+4;
  272. NSArray *array=[NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z",nil];
  273. for (int i=0; i<nameLen; i++) {
  274. int arryKey = arc4random() % [array count];
  275. NSString *let=[array objectAtIndex:arryKey];
  276. fileName = [let stringByAppendingString:fileName];
  277. }
  278. return fileName;
  279. }
  280. -(void)setPackName:(NSString*) packname{
  281. JoinFile * _joinFile=JoinFile::getInstance();
  282. _joinFile->setPackName([packname UTF8String]);
  283. }
  284. -(void)createFileFromConf:(NSString *)projectPath{
  285. JoinFile * _joinFile=JoinFile::getInstance();
  286. _joinFile->createFileFromConf([projectPath UTF8String]);
  287. }
  288. NSString * getMD5FromString(NSString * str)
  289. {
  290. const char *cStr = [str UTF8String];
  291. unsigned char result[16];
  292. CC_MD5( cStr, strlen(cStr), result );
  293. return [NSString stringWithFormat:
  294. @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  295. result[0], result[1], result[2], result[3],
  296. result[4], result[5], result[6], result[7],
  297. result[8], result[9], result[10], result[11],
  298. result[12], result[13], result[14], result[15]
  299. ];
  300. }
  301. -(void)dealAssetsYt:(NSString*)projectPath isAndroid:(BOOL)_isAndroid packgeName:(NSString*)packagename typeAddDic:(NSDictionary*)dic{
  302. JoinFile::getInstance()->setPackName([packagename UTF8String]);
  303. NSMutableArray * skipFileArr = [NSMutableArray arrayWithObjects:@".DS_Store", nil];
  304. projectPath = [projectPath stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  305. time(0);
  306. NSString * confFileName = @"mainData";
  307. NSMutableArray * txtFileTypeArr = [NSMutableArray arrayWithObjects:@"txt",@"fnt",@"json",@"lua",@"js", nil];
  308. NSMutableArray * binaryFileTypeArr = [NSMutableArray arrayWithObjects:@"jpg",@"png",@"ccbi", nil]; //@"jsc",
  309. NSMutableArray * musicFileTypeArr = [NSMutableArray arrayWithObjects:@"wav",@"mp3",@"WAV",@"MP3", nil];//
  310. NSMutableArray * dirCpTypeArr =[NSMutableArray arrayWithObjects:@"ttf",@"TTF",nil];//
  311. [txtFileTypeArr addObjectsFromArray:dic[@"txt"]];
  312. [binaryFileTypeArr addObjectsFromArray:dic[@"binary"]];
  313. [musicFileTypeArr addObjectsFromArray:dic[@"music"]];
  314. [dirCpTypeArr addObjectsFromArray:dic[@"cp"]];
  315. if (_isAndroid) {
  316. [txtFileTypeArr addObject:@"plist"];
  317. }
  318. NSMutableDictionary * pathDic = [NSMutableDictionary dictionary];
  319. NSMutableDictionary * decDic = [NSMutableDictionary dictionary];
  320. NSString * srcPath = projectPath;//NSTR(@"%@assets/",projectPath);
  321. NSString * dataDir = @"bin/Data";
  322. NSString * goalPath = NSTR(@"%@/%@_tmp",[projectPath stringByDeletingLastPathComponent],[projectPath lastPathComponent]);
  323. NSString * dataPath = NSTR(@"%@/%@",goalPath,dataDir);
  324. [ZGFileUtils deleteFileOrDirectoryAtPath:dataPath];
  325. [ZGFileUtils createDirectoryIfNotExist:dataPath];
  326. //开始混淆
  327. NSArray *fileArray = [ZGFileUtils arrayOfFileAtDirRecursion:srcPath];
  328. for(NSString * strFile in fileArray){
  329. bool needRec = true;
  330. bool needDec = false;
  331. NSString *file = [strFile stringByReplacingOccurrencesOfString:@"//" withString:@"/"];
  332. NSString * fileName=[file lastPathComponent];
  333. if([skipFileArr containsObject:fileName]){
  334. continue;
  335. }
  336. NSString * fileExt=[file pathExtension];
  337. NSString * subDir = [file substringFromIndex:[file rangeOfString:srcPath].length+1];
  338. NSString * armFileName = NSTR(@"%@/%@",dataDir,getMD5FromString(NSTR(@"%@_%@",subDir,[self randFileName])));//;fileName
  339. if ([musicFileTypeArr containsObject:fileExt]) {
  340. armFileName = [armFileName stringByAppendingString:@".jpg"];
  341. }
  342. NSString * armPath = NSTR(@"%@/%@",goalPath,armFileName);
  343. NSMutableDictionary * item = [NSMutableDictionary dictionaryWithObjectsAndKeys:armFileName,@"fileName", nil];
  344. if([txtFileTypeArr containsObject:fileExt]){
  345. JoinFile::getInstance()->encryptSingleFile([file UTF8String], [armPath UTF8String], "");
  346. [item setObject:@"t" forKey:@"type"];
  347. needDec = true;
  348. }
  349. else if([binaryFileTypeArr containsObject:fileExt]){
  350. JoinFile::getInstance()->encryptSingleFile([file UTF8String], [armPath UTF8String], "b");
  351. [item setObject:@"b" forKey:@"type"];
  352. needDec = true;
  353. }
  354. else if( [musicFileTypeArr containsObject:fileExt] ){
  355. FILE* musicFileHandle = fopen([armPath UTF8String], "wb");
  356. unsigned long nSize = 0;
  357. unsigned char *pBuffer =JoinFile::getInstance()->getFileData([file UTF8String],"rb", &nSize);
  358. NSString *lajiStr = [self randFileName];
  359. fwrite(pBuffer, sizeof(unsigned char), nSize, musicFileHandle);
  360. fwrite([lajiStr UTF8String], sizeof(char), [lajiStr length], musicFileHandle);
  361. [item setObject:@(0) forKey:@"start"];
  362. [item setObject:@(nSize) forKey:@"len"];
  363. fclose(musicFileHandle);
  364. }
  365. else if([dirCpTypeArr containsObject:fileExt]){
  366. DDLOG(@"不能处理的文件:%@,不变文件名,直接拷贝!",subDir);
  367. [ZGFileUtils copyFileFromPath:file toPath:NSTR(@"%@/%@",goalPath,subDir)];
  368. [item setObject:@"n" forKey:@"type"];
  369. needRec = false;
  370. }
  371. else{
  372. DDLOG(@"未知类型:%@,改下名字,直接拷贝!",subDir);
  373. [ZGFileUtils copyFileFromPath:file toPath:armPath];
  374. [item setObject:@"n" forKey:@"type"];
  375. }
  376. if(needRec){
  377. [pathDic setObject: item forKey:subDir];
  378. }
  379. if (needDec) {
  380. [decDic setObject:@"true" forKey:armFileName];
  381. }
  382. }
  383. //写配置表文件...
  384. NSString * armConfPath = NSTR(@"%@/%@",dataPath,confFileName);
  385. [[ZGJsonUtils dictionaryToString:@{@"path":pathDic,@"decode":decDic}] writeToFile:armConfPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
  386. JoinFile::getInstance()->encryptSingleFile([armConfPath UTF8String], [armConfPath UTF8String], "");
  387. //目录替换.
  388. if(_isAndroid){
  389. NSString * tmpDir = NSTR(@"%@_",projectPath);
  390. [ZGFileUtils deleteFileOrDirectoryAtPath:tmpDir];
  391. [FMGR moveItemAtPath:projectPath toPath:tmpDir error:nil];
  392. [FMGR moveItemAtPath:goalPath toPath:projectPath error:nil];
  393. }
  394. }
  395. @end