public AddStream ( Compression _method, string _filenameInZip, System.Stream _source, System.DateTime _modTime, string _comment, ushort access = 0x8100 ) : void | ||
_method | Compression | Compression method |
_filenameInZip | string | Filename and path as desired in Zip directory |
_source | System.Stream | Stream object containing the data to store in Zip |
_modTime | System.DateTime | Modification time of the data to store |
_comment | string | Comment for stored file |
access | ushort | |
return | void |
//Epubにファイルを追加する(mimetypeを除く) private static void WriteEpubFilesToZip(ZipStorer zip,string srcDir) { var files = Directory.GetFiles(srcDir, "*", SearchOption.AllDirectories); //全ファイル var targetFiles = files.Where(e => Path.GetFileName(e).Equals("mimetype") != true) //mimetypeを除く .Select(e => new FileInfo(e)); foreach (var targetFile in targetFiles) { var ext = targetFile.Extension; var compression = new ZipStorer.Compression(); switch (ext) { case "jpg": //画像ファイルは圧縮しない(時間の無駄なので) case "JPEG": case "png": case "PNG": case "gif": case "GIF": compression = ZipStorer.Compression.Store; break; case "EPUB": case "epub": continue; //EPUBファイルは格納しない default: compression = ZipStorer.Compression.Deflate; //通常のファイルは圧縮する break; } //対象を書き込む using (var ms = new MemoryStream(File.ReadAllBytes(targetFile.FullName))) { ms.Position = 0; //ファイルの先頭からコピー var fileNameInZip = GetRelPath(targetFile.FullName, srcDir); //zip内でのファイル名 zip.AddStream(compression, fileNameInZip, ms, DateTime.Now, string.Empty); } } }
//ファイルをzipファイルに書き込む private static void WriteFileToZip(ZipStorer zip, FileInfo file, string fileNameInZip, ZipStorer.Compression compression) { using(var m =new MemoryStream(File.ReadAllBytes(file.FullName))) //対象をファイルから読み出す { m.Position = 0; //先頭からコピー zip.AddStream(compression, fileNameInZip, m, DateTime.Now, String.Empty); //zipファイルに格納する } }
void AddCritterType( ZipStorer zip, CritterType crType ) { object datafile = null; if( !OpenCurrentDatafile( ref datafile ) ) return; List<CritterAnimationPacked> zipFiles = new List<CritterAnimationPacked>(); foreach( CritterAnimation crAnim in crType.Animations ) { List<string> nameList = new List<string>(); List<byte[]> bytesList = new List<byte[]>(); List<DateTime> dateList = new List<DateTime>(); string crName = crType.Name + crAnim.Name; for( int d = 0; d <= 5; d++ ) { if( crAnim.Dir[d] == CritterAnimationDir.None ) continue; string ext = ".FR" + (crAnim.Full ? "M" : d.ToString()); switch( LoadedMode ) { case LoadModeType.Directory: string filename = openDirectory.SelectedPath + Path.DirectorySeparatorChar + crName + ext; if( File.Exists( filename ) ) { zipFiles.Add( new CritterAnimationPacked( ArtCrittersZip + crName + ext, File.ReadAllBytes( filename ), File.GetLastWriteTime( filename ) ) ); } break; case LoadModeType.Zip: ZipStorer zipDatafile = (ZipStorer)datafile; MemoryStream stream = new MemoryStream(); zipDatafile.ExtractFile( crAnim.ZipData[d], stream ); zipFiles.Add( new CritterAnimationPacked( ArtCrittersZip + crName + ext, stream.ToArray(), crAnim.ZipData[d].ModifyTime ) ); break; case LoadModeType.Dat: DAT dat = (DAT)datafile; zipFiles.Add( new CritterAnimationPacked( ArtCrittersZip + crName + ext, dat.FileList[crAnim.DatData[d]].GetData(), DateTime.Now ) ); break; } if( crAnim.Full ) break; } } CloseCurrentDatafile( ref datafile ); foreach( CritterAnimationPacked crAnimPacked in zipFiles ) { MemoryStream stream = new MemoryStream( crAnimPacked.Bytes, false ); zip.AddStream( ZipStorer.Compression.Deflate, crAnimPacked.Filename, stream, crAnimPacked.Date, "" ); } }