944 messaggi dal 11 febbraio 2013
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 -
11.886 messaggi dal 09 febbraio 2002
Contributi

ok ho scritto in un txt il tempo è su server ottengo (portando fuori il ciclo su Enumerable string)
1831 contro 1912

ok, ottimo

Per loggare i tempi puoi anche usare Debug.WriteLine(messaggio) anziché scrivere un file di testo. Vedrai apparire il messaggio nella finestra di Output di Visual Studio.
Oppure, in alternativa, metti un breakpoint ed esamina il valore di ElapsedMilliseconds dopo l'istruzione in cui fermi lo stopwatch.

ciao ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.