/// <summary> /// 创建资源 /// </summary> /// <param name="filename"></param> /// <param name="imageFileName"></param> /// <param name="videoFileName"></param> /// <returns></returns> public static async Task MergeAsync(string OutputFileame, string Password, string videoFileName) { //构建头部 string extension = System.IO.Path.GetExtension(OutputFileame); OutputFileame = OutputFileame.Replace(extension, "加密" + extension); string Header = "@#$%#$^E$@$" + Password; var protect = new ProtectInfomat() { PassWord = Header.PadRight(1024, '\0').ToBytes(), }; //压缩头部 var headerBytes = await CompressAsync(StructToBytes(protect)); var headerSizeBytes = BitConverter.GetBytes(headerBytes.Length); //构建信息 var fileInformatSize = Marshal.SizeOf(typeof(FileStruct)); var videoInfo = new FileInfo(videoFileName); //更新位置信息 var Offset = 4 + headerBytes.Length + fileInformatSize; using (var stream = File.OpenWrite(OutputFileame)) { //将头部写入流 await stream.WriteAsync(headerSizeBytes, 0, 4); await stream.WriteAsync(headerBytes, 0, headerBytes.Length); //获取流开始位置及大小 var PosInformat = new FileStruct { OffsetBytes = BitConverter.GetBytes((long)Offset), LengthBytes = BitConverter.GetBytes(videoInfo.Length) }; //分配空间 var imageInformatBytes = StructToBytes(PosInformat); await stream.WriteAsync(imageInformatBytes, 0, imageInformatBytes.Length); using (var videoStream = videoInfo.Open(FileMode.Open)) { await videoStream.CopyToAsync(stream); } } }
//public static long MaterialId(this ProtectInfomat infomat) //{ // return BitConverter.ToInt64(infomat.MaterialIdBytes, 0); //} public static string PassWord(this ProtectInfomat infomat) { return(infomat.PassWord.ToStr()); }
public static string Descript(this ProtectInfomat infomat) { return(infomat.DescriptBytes.ToStr()); }
public static string UserId(this ProtectInfomat infomat) { return(infomat.UserIdBytes.ToStr()); }
public static string TypeName(this ProtectInfomat infomat) { return(infomat.TypeNameBytes.ToStr()); }
public static long MaterialId(this ProtectInfomat infomat) { return(BitConverter.ToInt64(infomat.MaterialIdBytes, 0)); }
public static async Task <string> BuilderProtectAsync( string folder, string descript, string userId, string typename, long materialId) { var protect = new ProtectInfomat() { DescriptBytes = descript.PadRight(30, '\0').ToBytes(), UserIdBytes = userId.PadRight(80, '\0').ToBytes(), TypeNameBytes = typename.PadRight(10, '\0').ToBytes(), MaterialIdBytes = longToBytes(materialId) }; var headerBytes = await CompressAsync(StructToBytes(protect)); var headerSizeBytes = BitConverter.GetBytes(headerBytes.Length); var fileInformatSize = Marshal.SizeOf(typeof(FileInformat)); var imageInfo = new FileInfo($"{folder}\\Image.png"); var videoInfo = new FileInfo($"{folder}\\Video.dat"); var imageOffset = 4 + headerBytes.Length + fileInformatSize * 2; var videoOffset = imageOffset + imageInfo.Length; var builderFilename = $"{folder}\\Protect"; using (var stream = File.OpenWrite(builderFilename)) { await stream.WriteAsync(headerSizeBytes, 0, 4); await stream.WriteAsync(headerBytes, 0, headerBytes.Length); var imageInformat = new FileStruct { OffsetBytes = BitConverter.GetBytes((long)imageOffset), LengthBytes = BitConverter.GetBytes((long)imageInfo.Length) }; var imageInformatBytes = StructToBytes(imageInformat); await stream.WriteAsync(imageInformatBytes, 0, imageInformatBytes.Length); var videoInformat = new FileStruct { OffsetBytes = BitConverter.GetBytes((long)videoOffset), LengthBytes = BitConverter.GetBytes((long)videoInfo.Length) }; var videoInformatBytes = StructToBytes(videoInformat); await stream.WriteAsync(videoInformatBytes, 0, videoInformatBytes.Length); using (var imageStream = imageInfo.Open(FileMode.Open)) { await imageStream.CopyToAsync(stream); } using (var videoStream = videoInfo.Open(FileMode.Open)) { await videoStream.CopyToAsync(stream); } } return(builderFilename); }
/// <summary> /// 创建资源 /// </summary> /// <param name="filename"></param> /// <param name="imageFileName"></param> /// <param name="videoFileName"></param> /// <param name="informat"></param> /// <returns></returns> public static async Task MergeAsync(string filename, string imageFileName, string videoFileName, FileInformat informat) { //构建头部 var protect = new ProtectInfomat() { DescriptBytes = informat.DescriptBytes, UserIdBytes = informat.UserIdBytes, TypeNameBytes = informat.TypeNameBytes, // MaterialIdBytes = longToBytes(informat.MaterialIdBytes) }; //压缩头部 var headerBytes = await CompressAsync(StructToBytes(protect)); var headerSizeBytes = BitConverter.GetBytes(headerBytes.Length); //构建图片流信息 var fileInformatSize = Marshal.SizeOf(typeof(FileStruct)); var imageInfo = new FileInfo(imageFileName); var videoInfo = new FileInfo(videoFileName); //更新 位置信息 var imageOffset = 4 + headerBytes.Length + fileInformatSize * 2; var videoOffset = imageOffset + imageInfo.Length; using (var stream = File.OpenWrite(filename)) { //将头部写入流 await stream.WriteAsync(headerSizeBytes, 0, 4); await stream.WriteAsync(headerBytes, 0, headerBytes.Length); //分析图片流位置及大小 var imageInformat = new FileStruct { OffsetBytes = BitConverter.GetBytes((long)imageOffset), LengthBytes = BitConverter.GetBytes(imageInfo.Length) }; //为图片流分配空间 var imageInformatBytes = StructToBytes(imageInformat); await stream.WriteAsync(imageInformatBytes, 0, imageInformatBytes.Length); //分析视频流位置及大小 var videoInformat = new FileStruct { OffsetBytes = BitConverter.GetBytes((long)videoOffset), LengthBytes = BitConverter.GetBytes(videoInfo.Length) }; //为视频流分配空间 var videoInformatBytes = StructToBytes(videoInformat); await stream.WriteAsync(videoInformatBytes, 0, videoInformatBytes.Length); #region 往分配的空间中写入流 using (var imageStream = imageInfo.Open(FileMode.Open)) { await imageStream.CopyToAsync(stream); } using (var videoStream = videoInfo.Open(FileMode.Open)) { await videoStream.CopyToAsync(stream); } #endregion } }