一,文件切割
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; /// <summary> /// /// </summary> public static class FileScripts { /// <summary> /// 文件切割 /// </summary> /// <param name="filePath">源文件,文件</param> /// <param name="Folder">目标路径,文件夹</param> /// <param name="partConunt">切割段数</param> public static void Split(string filePath,string Folder,int partConunt) { //如果目标路径不存在,则创建一个 if (!Directory.Exists(Folder)) { Directory.CreateDirectory(Folder); } //字节流,FileShare.Read多线程 using (FileStream streamRead = new FileStream(filePath,FileMode.Open,FileAccess.Read,FileShare.Read)) { //求每一段长度 long partLenght = streamRead.Length / partConunt; //循环段数 for (int i = 0; i < partConunt; i++) { //小文件命名:获取源文件名,不包含后缀名 string fileName = Path.GetFileNameWithoutExtension(filePath); //目标文件夹,下小文件命名,PadLeft左填充(位数,'填充数') string foldername = Folder + "/" + fileName + i.ToString().PadLeft(3,'0'); //判断是否是最后一段,如果是就把剩余加上 if (partConunt - 1 == 0) //加上剩余部分 partLenght = streamRead.Length % partLenght; //读取长度等于每段的长度 byte[] part = new byte[partLenght]; //读:存储的数组,开始,结束 streamRead.Read(part,0,part.Length); //写:目标文件夹下的小物件,写入的数据数组 File.WriteAllBytes(foldername,part); } } } }
二.路径
三.文件的合并
/// <summary> /// 文件合并 /// </summary> /// <param name="filePath">源文件夹</param> /// <param name="fileName">合并后文件名地址</param> public static void Merge(string filePath,string fileName) { //找到所有文件 FileInfo[] allFiles = new DirectoryInfo(filePath).GetFiles(); //计算总长度 long lenght = FileLenght(allFiles); //创建大文件 using (FileStream bigfile = new FileStream(fileName,FileMode.Create)) { //循环读取文件,写入到同一个文件中 bigfile.SetLength(lenght); for (int i = 0; i < allFiles.Length; i++) { byte[] fileBytes = File.ReadAllBytes(allFiles[i].FullName); bigfile.Write(fileBytes,0,fileBytes.Length); } } } //计算总长度的方法 private static long FileLenght(FileInfo[] allfiles) { long lenght = 0; for (int i = 0; i < allfiles.Length; i++) { lenght += allfiles[i].Length; } return lenght; }
四,测试、
public void OnGUI() { if (GUILayout.Button("加密")) { FileJiaMi.Encryption(path); } if (GUILayout.Button("文件拆分")) { string sourcePath = Application.dataPath + "/" + "zhandi.mp4"; string destPath = Application.persistentDataPath + "/01"; FileScripts.Split(sourcePath,destPath,5); } if (GUILayout.Button("文件合并")) { string sourcePath = Application.persistentDataPath + "/01"; string destPath = Application.dataPath + "/" + "zhandi2.mp4"; FileScripts.Merge(sourcePath,destPath); Debug.Log("合并成功"); } GUILayout.Label("Asset文件夹"+Application.dataPath); GUILayout.Label("StreamingAsset文件夹" + Application.streamingAssetsPath); GUILayout.Label("临时路径" + Application.temporaryCachePath); GUILayout.Label("持久路径" + Application.persistentDataPath); }