檢測壓縮包,解壓壓縮包,刪除壓縮包,文件的備份和覆蓋

        /// <summary>
        /// 檢測bedserver文件夾是不是存在
        /// </summary>
        /// <return></return>
        public bool checkBedserver()
        {
            string folderPath = SystemUtil.GetExeSetupPath() + "components\\web\\bedserver";
            //這和asp.net的寫法有點不一樣
            if (System.IO.Directory.Exists(folderPath) == false)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        /// <summary>
        /// 檢測有無bedserver.zip壓縮包
        /// </summary>
        /// <returns></returns>
        public bool checkBedserverzip()
        {
            sqlFileName = Directory.GetFiles(SystemUtil.GetExeSetupPath() + "components\\web\\");
            for (int i = 0; i < sqlFileName.Length; i++)
            {
                if (sqlFileName[i].Substring(sqlFileName[i].LastIndexOf("\\") + 1).Equals("bedserver.zip"))
                {
                    return true;
                }
            }
            return false;
        }


        /// <summary>
        /// 複製文件或文件夾到指定位置
        /// </summary>
        /// <param name="sourceFiles"></param>
        /// <param name="desFiles"></param>
        public void CopyFilesOrDir(string src, string des)
        {
            //System.Diagnostics.Debugger.Launch();
            try
            {
                if (Directory.Exists(src))
                {
                    if (!Directory.Exists(des))
                    {
                        Directory.CreateDirectory(des + "\\");
                    }
                    string[] dirs = Directory.GetDirectories(src);
                    string[] files = Directory.GetFiles(src);


                    if (files.Length > 0)
                    {
                        foreach (string item in files)
                        {
                            int index = item.LastIndexOf("\\") + 1;
                            string desPath = des + "\\" + item.Substring(index, item.Length - index);
                            string srcPath = item;
                            CopyFilesOrDir(srcPath, desPath);
                        }
                    }


                    if (dirs.Length > 0)
                    {
                        foreach (string item in dirs)
                        {
                            int index = item.LastIndexOf("\\") + 1;
                            string desPath = des + "\\" + item.Substring(index, item.Length - index);
                            string srcPath = item + "\\";
                            CopyFilesOrDir(srcPath, desPath);
                        }
                    }
                }
                else if (File.Exists(src))
                {
                    if (!File.Exists(des))
                    {
                        File.Create(des).Close();
                    }
                    File.Copy(src, des, true);
                }
            }
            catch (Exception)
            {


            }
        }


        /// <summary>
        /// 解壓bedserver壓縮包
        /// targetFile爲壓縮包路徑
        /// fileDir爲要解壓到哪裏的路徑
        /// </summary>
        /// <param name="targetFile"></param>
        /// <param name="fileDir"></param>
        public void unZipFile(string targetFile, string fileDir)
        {
            string rootFile = " ";
            try
            {
                //讀取壓縮文件(zip文件),準備解壓縮
                ZipInputStream s = new ZipInputStream(File.OpenRead(targetFile.Trim()));
                ZipEntry theEntry;
                string path = fileDir;
                //解壓出來的文件保存的路徑


                string rootDir = " ";
                //根目錄下的第一個子文件夾的名稱
                while ((theEntry = s.GetNextEntry()) != null)
                {
                    rootDir = Path.GetDirectoryName(theEntry.Name);
                    //得到根目錄下的第一級子文件夾的名稱
                    if (rootDir.IndexOf("\\") >= 0)
                    {
                        rootDir = rootDir.Substring(0, rootDir.IndexOf("\\") + 1);
                    }
                    string dir = Path.GetDirectoryName(theEntry.Name);
                    //根目錄下的第一級子文件夾的下的文件夾的名稱
                    string fileName = Path.GetFileName(theEntry.Name);
                    //根目錄下的文件名稱
                    if (dir != " ")
                    //創建根目錄下的子文件夾,不限制級別
                    {
                        if (!Directory.Exists(fileDir + "\\" + dir))
                        {
                            path = fileDir + "\\" + dir;
                            //在指定的路徑創建文件夾
                            Directory.CreateDirectory(path);
                        }
                    }
                    else if (dir == " " && fileName != "")
                    //根目錄下的文件
                    {
                        path = fileDir;
                        rootFile = fileName;
                    }
                    else if (dir != " " && fileName != "")
                    //根目錄下的第一級子文件夾下的文件
                    {
                        if (dir.IndexOf("\\") > 0)
                        //指定文件保存的路徑
                        {
                            path = fileDir + "\\" + dir;
                        }
                    }
                    if (dir == rootDir)
                    //判斷是不是需要保存在根目錄下的文件
                    {
                        path = fileDir + "\\" + rootDir;
                    }


                    //以下爲解壓縮zip文件的基本步驟
                    //基本思路就是遍歷壓縮文件裏的所有文件,創建一個相同的文件。
                    if (fileName != String.Empty)
                    {
                        FileStream streamWriter = File.Create(path + "\\" + fileName);
                        int size = 2048;
                        byte[] data = new byte[2048];
                        while (true)
                        {
                            size = s.Read(data, 0, data.Length);
                            if (size > 0)
                            {
                                streamWriter.Write(data, 0, size);
                            }
                            else
                            {
                                break;
                            }
                        }
                        streamWriter.Close();
                    }
                }
                s.Close();
            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// 檢查網站部署的版本方法
        /// 如果不是最新版本且存在壓縮包
        /// 備份用戶數據
        /// 解壓壓縮包
        /// 覆蓋
        /// 刪除壓縮包
        /// </summary>
        public void checkWebDeploy()
        {
            ///檢測是否存在Bedserver文件夾
                if (databaseUpgrade.checkBedserver())
                {
                    ///先備份userdata、 webconfig和upload文件
                    ///再刪除原bedserver
                    ///檢測是否存在Bedserver.zip壓縮包
                    if (databaseUpgrade.checkBedserverzip())
                    {
                        ///再解壓
                        ///在覆蓋
                        ///刪除臨時文件
                        ///刪除壓縮包
                        databaseUpgrade.CopyFilesOrDir(pathfile + "\\bedserver\\web.config", SystemUtil.GetExeSetupPath() + "newfile");
                        databaseUpgrade.CopyFilesOrDir(pathfile + "\\bedserver\\userdata", SystemUtil.GetExeSetupPath() + "userdatanewfile");
                        databaseUpgrade.CopyFilesOrDir(pathfile + "\\bedserver\\upload", SystemUtil.GetExeSetupPath() + "uploadnewfile");
                        Directory.Delete(pathfile + "\\bedserver", true);
                        databaseUpgrade.unZipFile(pathfile + "\\bedserver.zip", pathfile);
                        databaseUpgrade.CopyFilesOrDir(SystemUtil.GetExeSetupPath() + "newfile", pathfile + "\\bedserver\\web.config");
                        databaseUpgrade.CopyFilesOrDir(SystemUtil.GetExeSetupPath() + "userdatanewfile", pathfile + "\\bedserver\\userdata");
                        databaseUpgrade.CopyFilesOrDir(SystemUtil.GetExeSetupPath() + "uploadnewfile", pathfile + "\\bedserver\\upload");
                        Directory.Delete(SystemUtil.GetExeSetupPath() + "uploadnewfile", true);
                        Directory.Delete(SystemUtil.GetExeSetupPath() + "userdatanewfile", true);
                        File.Delete(SystemUtil.GetExeSetupPath() + "newfile");
                        File.Delete(pathfile + "\\bedserver.zip");
                    }
                }
                else
                {
                    ///檢測是否存在Bedserver.zip壓縮包
                    if (databaseUpgrade.checkBedserverzip())
                    {
                        ///解壓Bedserver.zip
                        databaseUpgrade.unZipFile(pathfile + "\\bedserver.zip", pathfile);
                        File.Delete(pathfile + "\\bedserver.zip");
                    }
                }
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章