赞
踩
demo只是验证想法,没有做很多异常处理
外界调用:
- let tool = FIleMergeTool(path: "/Users/zwyl/Desktop/bigImage.png")
-
- if let data = tool.divideFile() {
- let image = UIImage.init(data: data)
- self.baseImage.image = image
- }
-
- if let data = tool.mergeFile() {
- let image = UIImage.init(data: data)
- self.imageView.image = image
- }
核心实现:
- import Foundation
-
- class FIleMergeTool: NSObject {
-
- var path: String
- let prePath = "/Users/zwyl/Desktop/dividerF_file1"
- let lastPath = "/Users/zwyl/Desktop/dividerF_file2"
-
- init(path: String) {
- self.path = path
- super.init()
- }
-
- struct Const {
- // firstOffset 一定要 >= lastBegin
- static let firstOffset = 1024
- static let lastBegin = 1000
- }
-
-
- func divideFile() -> Data? {
- let url = URL(filePath: self.path)
-
- let preUrl = URL(filePath: prePath)
- let lastUrl = URL(filePath: lastPath)
-
- let data = try? Data(contentsOf: url)
- guard let data else {
- return nil
- }
-
- try? FileManager.default.removeItem(at: preUrl)
- try? FileManager.default.removeItem(at: lastUrl)
-
- // 获取第一部分
- let preRange = 0 ..< Const.firstOffset
- let preData = data.subdata(in: preRange)
- try? preData.write(to: preUrl)
-
- // 获取第二部分
- let lastRange = Const.lastBegin ..< data.count
- let lastData = data.subdata(in: lastRange)
- try? lastData.write(to: lastUrl)
-
- return data
- }
-
- // 重新读取文件, 拼接Data
- func mergeFile() -> Data? {
-
- let preUrl = URL(filePath: self.prePath)
- let lastUrl = URL(filePath: self.lastPath)
-
- let preData = try? Data(contentsOf: preUrl)
- guard let preData else {
- return nil
- }
-
- let lastData = try? Data(contentsOf: lastUrl)
- guard let lastData else {
- return nil
- }
-
- // 拼接第一段数据
- var resultData = Data()
- resultData.append(preData)
-
- // 拼接第二段数据
- let begin = Const.firstOffset - Const.lastBegin
- let otherData = lastData.subdata(in: begin ..< lastData.count)
- resultData.append(otherData)
- return resultData
- }
- }


删除重复部分后,继续拼接 ,即可得到原始文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。