questo è il codice che sto rivedendo con te
per ora il ciclo è invertito rispetto al tuo suggerimento
è tutto qua
try
{
string utente = HttpContext.Current.User.Identity.Name;
string[] articoliUtente = { "codiceInesistente" };
using (MyDataBaseEntities db = new MyDataBaseEntities())
{
// db.Database.Log = query => File.AppendAllText(System.Web.HttpContext.Current.Server.MapPath("/App_Data/log_query.txt"), query);
var divisioniUtente = (from d in db.TabellaDivisioni
where d.Codcli == utente
select d.Divisione).Distinct();
//articoli relativi alle linee attive per il cliente
articoliUtente = db.TABELLA_ARTICOLI.Where(item => divisioniUtente.Contains(item.divisione)).
Select(i => i.codice + "1Stampa.jpg").ToArray();
}
string fotoPath = Server.MapPath("~/Foto/");
string tempfolder = Server.MapPath("~/TMP/");
string copiaPath = Server.MapPath("~/MY_ZIP/Foto.zip");
string[] listaFoto = Directory.EnumerateFiles(fotoPath, "*.jpg").ToArray();
//IEnumerable<string> listaFoto = Directory.EnumerateFiles(fotoPath, "*.jpg");//enumera gli elementi uno alla volta
if (!Directory.Exists(tempfolder))
{
Directory.CreateDirectory(tempfolder);
}
foreach (var f in articoliUtente)
{
foreach (var i in listaFoto)
{
string nomeFoto = i.Substring(fotoPath.Length);
if (nomeFoto == f)
{
File.Copy(Path.Combine(fotoPath, nomeFoto), Path.Combine(tempfolder, nomeFoto.Replace("1Stampa", "")), true);
}
}
}
if (File.Exists(Server.MapPath("~/MY_ZIP/Foto.zip")))
{
File.Delete(Server.MapPath("~/MY_ZIP/Foto.zip"));
}
//creo file ZIP
ZipFile.CreateFromDirectory(tempfolder, copiaPath);
//DOWNLOAD ZIP
Response.ContentType = "application/zip";
Response.AppendHeader("Content-Disposition", "attachment; filename=Foto.zip");
Response.TransmitFile(Server.MapPath("~/MY_ZIP/Foto.zip"));
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();
IEnumerable<string> tempFolderItem = Directory.EnumerateFiles(tempfolder, "*.jpg");
if (tempFolderItem.Count() > 0)
{
foreach (var s in tempFolderItem)
{
File.Delete(s);
}
}
}
catch
{
lblmsg.Text = "Si è verificato un errore. Contattare il supporto. ";
}
finally {
//elimina cartelle...?
}
Il file si corrompe perchè usavo una session per recuperare i millisecondi
al page load
infatti rimossa la session e tolto lo Stopwatch non ho errori all'apertura dello zip
ok ho scritto in un txt il tempo è su server ottengo (portando fuori il ciclo su Enumerable string)
1831 contro 1912
grazie di tutto
professionalità
pazienza
ciao
Modificato da jjchuck il 18 dicembre 2017 11.30 -