Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    ZIP con SharpZipLib: Problema Parametri

    Salve, dico prima che di ASP.NET ne so pochissimo. Quando mi serve cerco in rete e provvedo alle dovute modifiche.

    Sto provando a zippare una cartella sul server. Questo script funziona bene ma non riesco a parametrizzarlo.

    I parametri che passo:
    - Cartella da zippare che è situata sul server " p_percorso "
    - Percorso e nome del file che si deve creare " NomeZip "

    Qui di seguito il pezzetto di script che mi crea problemi


    codice:
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Collections" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="System.Web.Security" %>
    <%@ Import Namespace="System.Web.UI" %>
    <%@ Import Namespace="System.Web.UI.WebControls" %>
    <%@ Import Namespace="System.Web.UI.HtmlControls" %>
    <%@ Import Namespace="ICSharpCode.SharpZipLib.Zip" %>
    <%@ Import Namespace="ICSharpCode.SharpZipLib.Checksums" %>
    
    
    <script runat="server">
    
    	const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\zip\creato\Test.zip";
    	//const string ZipFilePath = @Server.MapPath(this.Request.QueryString["NomeZip"]); 
        string OriginalFolderPath = "";
        
        protected void Page_Load(object sender, EventArgs e)
        {
            string p_percorso = Server.MapPath(this.Request.QueryString["p_percorso"]);
    Come si può vedere, il path e nome del file zip sono scritti belli e chiari. In questo modo funziona.
    Se tento di fargli caricare un parametro (vedere la riga sottostante remmata), mi da errore. Ho provato in varie forme ma sembra che il percorso lo vuole scritto in questo modo e basta.
    Invece il parametro "p_percorso" lo accetta senza problemi.

    Come posso fare per fargli digerire il parametro NomeZip?
    Grazie
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  2. #2
    L'errore? Qual'è?
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  3. #3
    attivando la riga remmata, l'errore è questo


    Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.

    Messaggio di errore del compilatore: CS0103: The name 'this' does not exist in the current context



    Riga 17:
    Riga 18: //const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\zip\creato\Test.z ip";
    Riga 19: const string ZipFilePath = @this.Request.QueryString["NomeZip"];
    Riga 20: string OriginalFolderPath = "";
    Riga 21:


    mi da l'errore su "this" ma se lo tolgo mi continua a dare errore.
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  4. #4
    asd, è la @ a che ti serve? L'errore è proprio per quel @this o se penso bene, successivamente te lo da anche quando scrivi @Request.Params...

    devi levare la @! Serve solo se devi formattare una stringa con caratteri di escape!
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  5. #5
    Se elimino solo THIS ho questo errore

    codice:
    Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente. 
    
    Messaggio di errore del compilatore: CS0120: An object reference is required for the nonstatic field, method, or property 'System.Web.UI.Page.Request.get'
    
    Errore nel codice sorgente:
    
     
    
    Riga 17: 
    Riga 18: 	//const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\zip\creato\Test.zip";
    Riga 19: 	const string ZipFilePath = @Request.QueryString["NomeZip"]; 
    Riga 20:     string OriginalFolderPath = "";
    Riga 21:

    Se elimino solo @ ho questo errore
    codice:
    Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente. 
    
    Messaggio di errore del compilatore: CS0027: Keyword 'this' is not available in the current context
    
    Errore nel codice sorgente:
    
     
    
    Riga 17: 
    Riga 18: 	//const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\zip\creato\Test.zip";
    Riga 19: 	const string ZipFilePath = this.Request.QueryString["NomeZip"]; 
    Riga 20:     string OriginalFolderPath = "";
    Riga 21:

    Se elimino @ e THIS ho questo errore
    codice:
    Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente. 
    
    Messaggio di errore del compilatore: CS0120: An object reference is required for the nonstatic field, method, or property 'System.Web.UI.Page.Request.get'
    
    Errore nel codice sorgente:
    
     
    
    Riga 17: 
    Riga 18: 	//const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\zip\creato\Test.zip";
    Riga 19: 	const string ZipFilePath = Request.QueryString["NomeZip"]; 
    Riga 20:     string OriginalFolderPath = "";
    Riga 21:

    ... che pesci devo prendere?
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  6. #6
    Riporto l'intero codice per la creazione dello ZIP.
    Come già detto, funziona perfettamente solo se il percorso e nome del file da creare è scritto in questo modo.
    codice:
    const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\ZipFile.zip";
    Mentre il percorso della cartella da zippare riesco tranquillamente a passarla come parametro.
    codice:
    string p_percorso = Server.MapPath(this.Request.QueryString["p_percorso"]);
    Devo assolutamente potergli passare anche dove creare il file e come chiamarlo.

    GRAZIE a chi mi aiuta!

    codice:
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Collections" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="System.Web.Security" %>
    <%@ Import Namespace="System.Web.UI" %>
    <%@ Import Namespace="System.Web.UI.WebControls" %>
    <%@ Import Namespace="System.Web.UI.HtmlControls" %>
    <%@ Import Namespace="ICSharpCode.SharpZipLib.Zip" %>
    <%@ Import Namespace="ICSharpCode.SharpZipLib.Checksums" %>
    
    
    <script runat="server">
    
    	const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\ZipFile.zip";
        string OriginalFolderPath = "";
        
        protected void Page_Load(object sender, EventArgs e)
        {
            string p_percorso = Server.MapPath(this.Request.QueryString["p_percorso"]);
    
            //if (string.IsNullOrEmpty(p_percorso)) return;
            if (p_percorso == null || p_percorso == string.Empty) return;
    
            OriginalFolderPath = p_percorso;
    
            try
            {
                CreaFileZip();
                SpedisciFile(ZipFilePath);
    
            }
            catch (Exception ex)
            {
                this.Response.Write(ex.Message);        
            }    
        }
        
        
    
        private void CreaFileZip()
        {
            Zip.ZipFolder(ZipFilePath, OriginalFolderPath);
        }
    
    
    
        private void SpedisciFile(string filePath)
        {
            Response.Expires = -1;
    
            //' verifica esistenza 
            FileInfo fi  = new FileInfo(filePath);
            if (fi.Exists)
            {
                //' imposta le headers 
                Response.Clear();
                Response.AddHeader(@"Content-Disposition", @"attachment; filename=""" + fi.Name + @"""");
                Response.AddHeader("Content-Length", fi.Length.ToString());
                Response.ContentType = "application/octet-stream";
    
                //' leggo dal file e scrivo nello stream di risposta 
                Response.WriteFile(filePath);
    
                Response.End();
            }
            else
        		Response.Write("Impossibile scaricare il file.");
    
        }
        
        
        
        
        
        
        
    //---------------------------------
    //http://www.guru4.net/articoli/zip/
    //---------------------------------
        /// <summary>
        /// Zip
        /// </summary>
        public class Zip
        {
            #region public methods
    
            /// <summary>
            /// Comprime il contenuto di un file in formato ZIP
            /// </summary>
            /// <param name="ZipFilePath">Path del file compresso da creare</param>
            /// <param name="OriginalFilePath">Path del file da comprimere</param>
            public static void ZipFile(string ZipFilePath, string OriginalFilePath)
            {
                ZipOutputStream zip = null;
                try
                {
                    FileInfo fi = new FileInfo(OriginalFilePath);
                    zip = new ZipOutputStream(File.Create(ZipFilePath));
                    zip.SetLevel(6);    // 0 - store only to 9 - means best compression
                    AddFile2Zip(zip, fi, "");
                    zip.Finish();
                    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                { if (zip != null) zip.Close(); }
            }
    
            /// <summary>
            /// Comprime il contenuto di una cartella in formato ZIP, ricorsivamente e preservandone la struttura
            /// </summary>
            /// <param name="ZipFilePath">Path del file compresso da creare</param>
            /// <param name="OriginalFolderPath">Path della cartella da comprimere</param>
            public static void ZipFolder(string ZipFilePath, string OriginalFolderPath)
            {
                ZipOutputStream zip = null;
                try
                {
                    DirectoryInfo di = new DirectoryInfo(OriginalFolderPath);
                    zip = new ZipOutputStream(File.Create(ZipFilePath));
                    zip.SetLevel(6);    // 0 - store only to 9 - means best compression
                    AddFolder2Zip(zip, di, "");
       				zip.Finish();
                    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                { if (zip != null) zip.Close(); }
    
            }
    
            /// <summary>
            /// Decomprime un file compresso ZIP nella cartella di destinazione specificata
            /// </summary>
            /// <param name="ZipFilePath">Path del file ZIP da decomprimere</param>
            /// <param name="DestinationPath">Cartella di destinazione dell'archivio decompresso</param>
            public static void UnZip(string ZipFilePath, string DestinationPath)
            {
                string dp = "";
                ZipInputStream zip = null;
                ZipEntry entry = null;
                FileStream streamWriter = null;
    
                try
                {
         			if( !Directory.Exists(DestinationPath) ) Directory.CreateDirectory(DestinationPath);
                    dp = (DestinationPath.EndsWith("\\")) ? DestinationPath : DestinationPath + @"\";
                    zip = new ZipInputStream(File.OpenRead(ZipFilePath));
    
                    while ((entry = zip.GetNextEntry()) != null)
                    {
                        if (entry.IsDirectory)
                            Directory.CreateDirectory(dp + entry.Name);
                        else
                        {
                            streamWriter = File.Create(dp + entry.Name);
                            int size = 2048;
                            byte[] data = new byte[2048];
                            while (true)
                            {
                                size = zip.Read(data, 0, data.Length);
                                if (size > 0)
                                    streamWriter.Write(data, 0, size);
                                else
                                    break;
                            }
                            streamWriter.Close();
                        }
                    }
                    //zip.Close();
    
                }
                catch (Exception ex)
                {
     				throw ex;
                }
                finally
                {
                    if (streamWriter != null) streamWriter.Close();
                    if (zip != null) zip.Close();
                }
    
    
    
            }
    
            
    
    
            #endregion
    
            #region private methods
    
            private static void AddFolder2Zip(ZipOutputStream zip, DirectoryInfo di, string internalzippath)
            {
                string izp = internalzippath + di.Name + "/";    // A directory is determined by an entry name with a trailing slash "/"
                Crc32 crc = new Crc32();
                ZipEntry entry = new ZipEntry(izp);
                entry.Crc = crc.Value;
                zip.PutNextEntry(entry);
                foreach (FileInfo fi in di.GetFiles())
                    AddFile2Zip(zip, fi, izp);
                foreach (DirectoryInfo sdi in di.GetDirectories())
                    AddFolder2Zip(zip, sdi, izp);
            }
            private static void AddFile2Zip(ZipOutputStream zip, FileInfo fi, string internalzippath)
            {
                Crc32 crc = new Crc32();
                FileStream fs = File.OpenRead(fi.FullName);
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
                ZipEntry entry = new ZipEntry(internalzippath + fi.Name);
                entry.DateTime = DateTime.Now;
                entry.Size = fs.Length;
                fs.Close();
                crc.Reset();
                crc.Update(buffer);
                entry.Crc = crc.Value;
                zip.PutNextEntry(entry);
                zip.Write(buffer, 0, buffer.Length);
            }
    
            #endregion
        }
    
    </script>
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  7. #7
    Il problema è proprio in questa "costante":

    codice:
    const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\ZipFile.zip";
    allora fai conto che il contesto di <script runat="server"> è l'oggetto pagina, all'interno di questo puoi istanziare metodi e proprietà, ma quando dichiari una costante che addirittura chiede l'invocazione di un metodo dell'oggetto (this.Request.Params) all'interno dell'oggetto stesso è più che normale che ti dia errore. Il codice corretto dovrebbe essere come segue:

    codice:
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Collections" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="System.Web.Security" %>
    <%@ Import Namespace="System.Web.UI" %>
    <%@ Import Namespace="System.Web.UI.WebControls" %>
    <%@ Import Namespace="System.Web.UI.HtmlControls" %>
    <%@ Import Namespace="ICSharpCode.SharpZipLib.Zip" %>
    <%@ Import Namespace="ICSharpCode.SharpZipLib.Checksums" %>
    
    
    <script runat="server">
        //Quanto scritto sotto è sbagliatissimo!!).
        //const string ZipFilePath = @"D:\inetpub\webs\mywebit\public\ZipFile.zip";
        //Qui la modifica:
        private string ZipFilePath = null;
        string OriginalFolderPath = "";
        
        protected void Page_Load(object sender, EventArgs e)
        {
            //Qui prelevi il valore, nel page load:
            this.ZipFilePath = Request.Params["NomeZip"];
    
            string p_percorso = Server.MapPath(this.Request.QueryString["p_percorso"]);
            string ZipFile
            //if (string.IsNullOrEmpty(p_percorso)) return;
            if (p_percorso == null || p_percorso == string.Empty) return;
    
            OriginalFolderPath = p_percorso;
    
            try
            {
                CreaFileZip();
                SpedisciFile(ZipFilePath);
    
            }
            catch (Exception ex)
            {
                this.Response.Write(ex.Message);        
            }    
        }
        
        
    
        private void CreaFileZip()
        {
            Zip.ZipFolder(ZipFilePath, OriginalFolderPath);
        }
    
    
    
        private void SpedisciFile(string filePath)
        {
            Response.Expires = -1;
    
            //' verifica esistenza 
            FileInfo fi  = new FileInfo(filePath);
            if (fi.Exists)
            {
                //' imposta le headers 
                Response.Clear();
                Response.AddHeader(@"Content-Disposition", @"attachment; filename=""" + fi.Name + @"""");
                Response.AddHeader("Content-Length", fi.Length.ToString());
                Response.ContentType = "application/octet-stream";
    
                //' leggo dal file e scrivo nello stream di risposta 
                Response.WriteFile(filePath);
    
                Response.End();
            }
            else
        		Response.Write("Impossibile scaricare il file.");
    
        }
        
        
        
        
        
        
        
    //---------------------------------
    //http://www.guru4.net/articoli/zip/
    //---------------------------------
        /// <summary>
        /// Zip
        /// </summary>
        public class Zip
        {
            #region public methods
    
            /// <summary>
            /// Comprime il contenuto di un file in formato ZIP
            /// </summary>
            /// <param name="ZipFilePath">Path del file compresso da creare</param>
            /// <param name="OriginalFilePath">Path del file da comprimere</param>
            public static void ZipFile(string ZipFilePath, string OriginalFilePath)
            {
                ZipOutputStream zip = null;
                try
                {
                    FileInfo fi = new FileInfo(OriginalFilePath);
                    zip = new ZipOutputStream(File.Create(ZipFilePath));
                    zip.SetLevel(6);    // 0 - store only to 9 - means best compression
                    AddFile2Zip(zip, fi, "");
                    zip.Finish();
                    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                { if (zip != null) zip.Close(); }
            }
    
            /// <summary>
            /// Comprime il contenuto di una cartella in formato ZIP, ricorsivamente e preservandone la struttura
            /// </summary>
            /// <param name="ZipFilePath">Path del file compresso da creare</param>
            /// <param name="OriginalFolderPath">Path della cartella da comprimere</param>
            public static void ZipFolder(string ZipFilePath, string OriginalFolderPath)
            {
                ZipOutputStream zip = null;
                try
                {
                    DirectoryInfo di = new DirectoryInfo(OriginalFolderPath);
                    zip = new ZipOutputStream(File.Create(ZipFilePath));
                    zip.SetLevel(6);    // 0 - store only to 9 - means best compression
                    AddFolder2Zip(zip, di, "");
       				zip.Finish();
                    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                { if (zip != null) zip.Close(); }
    
            }
    
            /// <summary>
            /// Decomprime un file compresso ZIP nella cartella di destinazione specificata
            /// </summary>
            /// <param name="ZipFilePath">Path del file ZIP da decomprimere</param>
            /// <param name="DestinationPath">Cartella di destinazione dell'archivio decompresso</param>
            public static void UnZip(string ZipFilePath, string DestinationPath)
            {
                string dp = "";
                ZipInputStream zip = null;
                ZipEntry entry = null;
                FileStream streamWriter = null;
    
                try
                {
         			if( !Directory.Exists(DestinationPath) ) Directory.CreateDirectory(DestinationPath);
                    dp = (DestinationPath.EndsWith("\\")) ? DestinationPath : DestinationPath + @"\";
                    zip = new ZipInputStream(File.OpenRead(ZipFilePath));
    
                    while ((entry = zip.GetNextEntry()) != null)
                    {
                        if (entry.IsDirectory)
                            Directory.CreateDirectory(dp + entry.Name);
                        else
                        {
                            streamWriter = File.Create(dp + entry.Name);
                            int size = 2048;
                            byte[] data = new byte[2048];
                            while (true)
                            {
                                size = zip.Read(data, 0, data.Length);
                                if (size > 0)
                                    streamWriter.Write(data, 0, size);
                                else
                                    break;
                            }
                            streamWriter.Close();
                        }
                    }
                    //zip.Close();
    
                }
                catch (Exception ex)
                {
     				throw ex;
                }
                finally
                {
                    if (streamWriter != null) streamWriter.Close();
                    if (zip != null) zip.Close();
                }
    
    
    
            }
    
            
    
    
            #endregion
    
            #region private methods
    
            private static void AddFolder2Zip(ZipOutputStream zip, DirectoryInfo di, string internalzippath)
            {
                string izp = internalzippath + di.Name + "/";    // A directory is determined by an entry name with a trailing slash "/"
                Crc32 crc = new Crc32();
                ZipEntry entry = new ZipEntry(izp);
                entry.Crc = crc.Value;
                zip.PutNextEntry(entry);
                foreach (FileInfo fi in di.GetFiles())
                    AddFile2Zip(zip, fi, izp);
                foreach (DirectoryInfo sdi in di.GetDirectories())
                    AddFolder2Zip(zip, sdi, izp);
            }
            private static void AddFile2Zip(ZipOutputStream zip, FileInfo fi, string internalzippath)
            {
                Crc32 crc = new Crc32();
                FileStream fs = File.OpenRead(fi.FullName);
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
                ZipEntry entry = new ZipEntry(internalzippath + fi.Name);
                entry.DateTime = DateTime.Now;
                entry.Size = fs.Length;
                fs.Close();
                crc.Reset();
                crc.Update(buffer);
                entry.Crc = crc.Value;
                zip.PutNextEntry(entry);
                zip.Write(buffer, 0, buffer.Length);
            }
    
            #endregion
        }
    
    </script>
    Spero ti sia di aiuto
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  8. #8

    RoBYCoNTe

    SANTO SUBITO


    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Quel codice mi serviva solo per esercizio. E avevo scelto con cognizione di causa di usare la mia directory temporanea per salvare il file. Ecco perchè utilizzai una costante, per definizione immutabile, che per me era corretto.
    Il problema nasce dal fatto che il codice proposto da altri deve essere valutato criticamente ed adattato al proprio scopo.

    giusto solo per la cronaca, se recupero dall'esterno la variabile

    string p_percorso = this.Request.QueryString["p_percorso"];
    e faccio OriginalFolderPath = p_percorso;

    è chiaro che basta ripetere il codice, cambiando il dovuto:
    string p_zip = this.Request.QueryString["p_zip"];
    if (p_zip == null || p_zip == string.Empty) return;
    ZipFilePath = p_zip;

    Salute
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.