11import java.io.File
2+ import java.io.FileInputStream
3+ import java.io.FileOutputStream
4+ import java.util.zip.ZipEntry
5+ import java.util.zip.ZipInputStream
6+ import java.util.zip.ZipOutputStream
27
38object ArchAndRustTargetMapping {
49 val iosRustTargetToArchMapping = mutableMapOf (
@@ -74,4 +79,72 @@ fun copyDirectoryToTarget(
7479 copyFileToTarget(file.path, targetPath, hardLinkOrCopyFile)
7580 }
7681 }
82+ }
83+
84+ fun createZipFile (sourceDirPath : String , outputZipFilePath : String ) {
85+ val sourceDir = File (sourceDirPath)
86+
87+ if (! sourceDir.exists()) {
88+ println (" win平台rust静态链接库不存在" )
89+ return
90+ }
91+
92+ FileOutputStream (outputZipFilePath).use { fos ->
93+ ZipOutputStream (fos).use { zos ->
94+ addFilesToZip(sourceDir, sourceDir, zos)
95+ }
96+ }
97+ }
98+
99+ private fun addFilesToZip (rootDir : File , currentDir : File , zos : ZipOutputStream ) {
100+ for (file in currentDir.listFiles() ? : emptyArray()) {
101+ if (file.isDirectory) {
102+ // 如果是目录,递归处理
103+ addFilesToZip(rootDir, file, zos)
104+ } else {
105+ // 如果是文件,添加到 ZIP
106+ FileInputStream (file).use { fis ->
107+ val entryPath = rootDir.toPath().relativize(file.toPath()).toString()
108+ zos.putNextEntry(ZipEntry (entryPath))
109+ fis.copyTo(zos)
110+ zos.closeEntry()
111+ }
112+ }
113+ }
114+ }
115+
116+ fun unzipFile (zipFilePath : String , outputDirPath : String ) {
117+ val zipFile = File (zipFilePath)
118+ if (! zipFile.exists() || ! zipFile.isFile) {
119+ println (" ZIP file does not exist or is not a file: $zipFilePath " )
120+ return
121+ }
122+
123+ val outputDir = File (outputDirPath)
124+ if (! outputDir.exists()) {
125+ outputDir.mkdirs() // 如果目标目录不存在,则创建
126+ }
127+
128+ // 打开 ZIP 文件并逐条解压
129+ ZipInputStream (FileInputStream (zipFile)).use { zis ->
130+ var entry: ZipEntry ?
131+ while (zis.nextEntry.also { entry = it } != null ) {
132+ val entryName = entry!! .name
133+ val outputFile = File (outputDir, entryName)
134+
135+ if (entry!! .isDirectory) {
136+ // 如果是目录,创建目录
137+ outputFile.mkdirs()
138+ } else {
139+ // 如果是文件,创建父目录并写入文件内容
140+ outputFile.parentFile.mkdirs()
141+ FileOutputStream (outputFile).use { fos ->
142+ zis.copyTo(fos)
143+ }
144+ }
145+
146+ // 关闭当前条目
147+ zis.closeEntry()
148+ }
149+ }
77150}
0 commit comments