public static bool Comprimi(object oggDaCompr, string percNomeFileCompr, TipiArchivio formatoArchivio = TipiArchivio.sevenZip, CompressionLevels livelloCompr = CompressionLevels.Ultra, string password = null, int timeOutMs = -1, Progressione progressione = null, Mess logMess = null) { Thread thrZip = null; return(Comprimi(oggDaCompr, percNomeFileCompr, out thrZip, formatoArchivio: formatoArchivio, livelloCompr: livelloCompr, password: password, timeOutMs: timeOutMs, progressione: progressione , logMess: logMess)); }
/// <param name="oggDaCompr">può essere: string (file o cartella), List(Of String) (file o cartella), oggDaComprimere (file o cartella), List(Of oggDaComprimere) (file o cartella)</param> /// <param name="timeOutMs">0 == Non attende la compressione ma ritorna subito | -1 == Attesa infinita | XX == Attesa massima fino a XX ms</param> public static bool Comprimi(object oggDaCompr, string percNomeFileCompr, out Thread thrZip, TipiArchivio formatoArchivio = TipiArchivio.sevenZip, CompressionLevels livelloCompr = CompressionLevels.Ultra, string password = null, int timeOutMs = -1, Progressione progressione = null, Mess logMess = null) { thrZip = null; try { if (logMess == null) { logMess = new Mess(LogType.Warn, Log.main.warnUserText); } if ((Zip.inizializzato == false) && inizializza(logMess) == false) { return(false); } Dictionary <string, string> dizionario; bool esito; if (FS.ValidaPercorsoFile(percNomeFileCompr, true, percFileFormattato: out percNomeFileCompr, verEsistenza: CheckExistenceOf.PathFolderOnly, logMess: logMess) == false) { return(false); } if (PreparazioneDizionario(oggDaCompr, out dizionario, logMess) == false) { return(false); } if (dizionario.Count == 0) { Log.main.Add(new Mess(LogType.info, "Non ci sono file da comprimere")); return(true); } esito = false; thrZip = Thr.AvviaNuovo(() => esito = ThrComprimi(dizionario, percNomeFileCompr, formatoArchivio, livelloCompr, password, progressione)); if (timeOutMs != 0) { //Non attendo il completamento del thr se = 0 if (Thr.AttesaCompletamento(ref thrZip, timeOutMs) == false || esito == false) { return(false); } } if (thrZip.ThreadState == ThreadState.Aborted) { return(false); } return(true); } catch { return(false); } }
private static bool ThrComprimi(Dictionary <string, string> dizionarioDaCompr, string percNomeFileCompr, TipiArchivio formatoArchivio, CompressionLevels livelloCompr, string passsword, Progressione Progressione) { Thr.SbloccaThrPadre(); SevenZipCompressor zipCompressor; try { zipCompressor = new SevenZipCompressor(); if (Progressione != null) { progressioniAttuali.Add(zipCompressor.UniqueID, Progressione); } zipCompressor.CompressionMode = CompressionMode.Create; zipCompressor.TempFolderPath = Path.GetTempPath(); zipCompressor.ArchiveFormat = (OutArchiveFormat)(int)formatoArchivio; zipCompressor.CompressionMethod = CompressionMethod.Lzma; //ATTENZIONE: la libreria 16.04 con Lzma2 in alcuni casi va in errore if (passsword != null) { zipCompressor.EncryptHeaders = true; zipCompressor.ZipEncryptionMethod = ZipEncryptionMethod.Aes256; } //il formato 7zip se la dll viene eseguita a 32bit non accetta un livello di compressione superiore a Normal if (formatoArchivio == TipiArchivio.sevenZip && livelloCompr > CompressionLevels.Normal && Environment.Is64BitProcess == false) { livelloCompr = CompressionLevels.Normal; } zipCompressor.CompressionLevel = (SevenZip.CompressionLevel)(int) livelloCompr; zipCompressor.Compressing += PercentualeCompressa; zipCompressor.CompressionFinished += CompressioneTerminata; zipCompressor.CompressFileDictionary(dizionarioDaCompr, percNomeFileCompr, passsword); return(true); } catch (Exception ex) { if (Progressione != null) { Progressione.ScatenaEventoTerminataConErrori(ex.Message); } //If progressioniAttuali.ContainsKey(zipCompressor.UniqueID) Then progressioniAttuali(zipCompressor.UniqueID).ScatenaEventoTerminataConErrori(ex.Message) return(false); } }