﻿
{"id":2813,"date":"2014-07-02T02:08:34","date_gmt":"2014-07-02T02:08:34","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=2813"},"modified":"2014-07-02T02:13:12","modified_gmt":"2014-07-02T02:13:12","slug":"c-system-io-packaging-kutuphanesi-ile-dosya-sikistirma","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-system-io-packaging-kutuphanesi-ile-dosya-sikistirma\/","title":{"rendered":"C# &#8211; System.IO.Packaging K\u00fct\u00fcphanesi \u0130le Dosya S\u0131k\u0131\u015ft\u0131rma"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Uzun s\u00fcredir C#&#8217;ta dosya s\u0131k\u0131\u015ft\u0131rma konusunu ara\u015ft\u0131rmakta oldu\u011fumdan dolay\u0131 \u015fahsi kanaatim bu konu \u00fczerine net bir a\u00e7\u0131klama yapan pek bir kaynak bulunmad\u0131\u011f\u0131ndan yanad\u0131r.Bu yaz\u0131mda sizlere \u00e7ok g\u00fczel bir dosya s\u0131k\u0131\u015ft\u0131rma tekni\u011fi g\u00f6sterece\u011fim.\u0130\u015fin g\u00fczel yan\u0131 bu yaz\u0131mdan sonraki iki yaz\u0131mda da C#&#8217;ta s\u0131k\u0131\u015ft\u0131rma tekniklerini ele alaca\u011f\u0131z.Yani \u00fc\u00e7 farkl\u0131 teknikle ayn\u0131 i\u015flemi inceleyece\u011fimizi umuyorum.<br \/>\n<!--more--><br \/>\n\u015eimdi h\u0131zl\u0131 bir \u015fekilde C#&#8217;ta System.IO.Packaging k\u00fct\u00fcphanesiyle bir dosya teknik olarak nas\u0131l s\u0131k\u0131\u015ft\u0131r\u0131l\u0131r inceleyelim.<\/p>\n<p>System.IO.Packaging k\u00fct\u00fcphanesini kullanabilmek i\u00e7in projenizde haz\u0131rlamam\u0131z gereken tek husus &#8220;WindowsBase.dll&#8221; dosyas\u0131n\u0131 projenize entegre etmenizdir.Bu i\u015flem i\u00e7in projenize sa\u011f t\u0131klayarak &#8220;Add&#8221; -&gt; &#8220;Reference&#8221; kombinasyonunu takip ediniz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/WindowsBase-dll.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2814\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/WindowsBase-dll.png\" alt=\"WindowsBase-dll\" width=\"573\" height=\"266\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/WindowsBase-dll.png 573w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/WindowsBase-dll-300x139.png 300w\" sizes=\"auto, (max-width: 573px) 100vw, 573px\" \/><\/a><br \/>\nA\u00e7\u0131lan pencerede soldaki &#8220;Assemblies&#8221; kategegorisinden &#8220;Framework&#8221; kategorisini se\u00e7in ve &#8220;WindowsBase&#8221; isimli dosyay\u0131 projenize dahil etmek i\u00e7in kutucu\u011funa i\u015faret koyup &#8220;OK&#8221; butonuna t\u0131klay\u0131n\u0131z.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/windowsbase-dll-y\u00fckleme.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2815\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/windowsbase-dll-y\u00fckleme.png\" alt=\"windowsbase-dll-y\u00fckleme\" width=\"694\" height=\"343\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/windowsbase-dll-y\u00fckleme.png 694w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/windowsbase-dll-y\u00fckleme-300x148.png 300w\" sizes=\"auto, (max-width: 694px) 100vw, 694px\" \/><\/a><\/p>\n<p>S\u0131k\u0131\u015ft\u0131rma s\u0131n\u0131f\u0131n\u0131 rahat ve esnek yazabilmek i\u00e7in iki adet Base Class olu\u015fturaca\u011f\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public abstract class ArchiveObj\r\n    {\r\n        internal String strPath;\r\n        internal List&lt;String&gt; lError;\r\n        internal List&lt;String&gt; lFiles;\r\n        public String&#x5B;] ErrorList\r\n        {\r\n            get\r\n            {\r\n                return lError.ToArray();\r\n            }\r\n        }\r\n        public ArchiveObj()\r\n        {\r\n            lFiles = new List&lt;string&gt;();\r\n            lError = new List&lt;string&gt;();\r\n        }\r\n        public Boolean AddFile(String strFile)\r\n        {\r\n            lFiles.Add(strFile);\r\n            return true;\r\n        }\r\n        public abstract int SaveArchive();\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public abstract class ArchiveCreator\r\n    {\r\n        internal String strPath;\r\n        public abstract ArchiveObj GetArchieve();\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;ArchiveObj&#8221; ve &#8220;ArchiveCreator&#8221; isimlerinde iki adet abstract s\u0131n\u0131f olu\u015fturduk.Bu s\u0131n\u0131flar\u0131 Base Class olarak kullanaca\u011f\u0131z.S\u0131n\u0131flar\u0131n i\u015fleyi\u015fini burada uzun uzun bahsetmektense sizlerin incelemenizi tavsiye ediyorum.Lakin bu iki s\u0131n\u0131f\u0131 benzer ya da birebir olu\u015fturman\u0131z amac\u0131m\u0131za yeterince hizmet etmi\u015f olacakt\u0131r.<\/p>\n<p>\u015eimdi gelelim s\u0131k\u0131\u015ft\u0131rma i\u015flemini yapacak program komutlar\u0131na.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class WinBaseZip : ArchiveObj\r\n    {\r\n        private WinBaseZip() { }\r\n        public WinBaseZip(String sPath)\r\n        {\r\n            strPath = sPath;\r\n        }\r\n        public override int SaveArchive()\r\n        {\r\n            foreach (String strFile in lFiles)\r\n                zipFile(strFile);\r\n            if (lError.Count &gt; 0)\r\n            {\r\n                if (lError.Count &lt; lFiles.Count)\r\n                    return 0;\r\n                else\r\n                    return -1;\r\n            }\r\n            return 1;\r\n        }\r\n        private bool zipFile(String strFile)\r\n        {\r\n            PackagePart pkgPart = null;\r\n            using (Package Zip = Package.Open(strPath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite))\r\n            {\r\n                String strTemp = strFile.Replace(&quot; &quot;, &quot;_&quot;);\r\n                String zipURI = String.Concat(&quot;\/&quot;, System.IO.Path.GetFileName(strTemp));\r\n                Uri parturi = new Uri(zipURI, UriKind.Relative);\r\n                try\r\n                {\r\n                    pkgPart = Zip.CreatePart(parturi, System.Net.Mime.MediaTypeNames.Application.Zip, CompressionOption.Normal);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    lError.Add(strFile + &quot;; Error : &quot; + ex.Message);\r\n                    return false;\r\n                }\r\n                Byte&#x5B;] bites = System.IO.File.ReadAllBytes(strFile);\r\n                pkgPart.GetStream().Write(bites, 0, bites.Length);\r\n                Zip.Close();\r\n            }\r\n            return true;\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class WinBaseZipCreator : ArchiveCreator\r\n    {\r\n        private WinBaseZipCreator() { }\r\n        public WinBaseZipCreator(String sPath)\r\n        {\r\n            strPath = sPath;\r\n        }\r\n        public override ArchiveObj GetArchieve()\r\n        {\r\n            return new WinBaseZip(strPath);\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;WinBaseZip&#8221; ve &#8220;WinBaseZipCreator&#8221; isimlerinde iki adet s\u0131n\u0131f olu\u015fturduk.&#8221;WinBaseZip&#8221; isimli s\u0131n\u0131f\u0131m\u0131z &#8220;ArchiveObj&#8221; s\u0131n\u0131f\u0131ndan, &#8220;WinBaseZipCreator&#8221; s\u0131n\u0131f\u0131 ise &#8220;ArchiveCreator&#8221; s\u0131n\u0131f\u0131ndan kal\u0131t\u0131m almaktad\u0131r.Tabi bu arada &#8220;PackagePart&#8221; referans\u0131n\u0131 kullanabilmek i\u00e7in &#8220;<span style=\"color: #ff00ff;\">System.IO.Packaging<\/span>&#8221; k\u00fct\u00fcphanesini kod sayfas\u0131na \u00e7a\u011f\u0131rman\u0131z gerekmektedir.<\/p>\n<p>Yukar\u0131daki s\u0131n\u0131flar\u0131n i\u015flevlerinden de bahsetmem pek m\u00fcmk\u00fcn de\u011fildir.En az\u0131ndan internette ki s\u0131k\u0131\u015ft\u0131rma makalelerine nazaran bu komutlar ciddi i\u015flev g\u00f6rmekte ve son a\u015famadaki kullan\u0131mlar\u0131 \u00e7ok basit olmaktad\u0131r.<\/p>\n<p>Son a\u015fama demi\u015fken, art\u0131k s\u0131k\u0131\u015ft\u0131rma i\u015flemini yapacak yaz\u0131l\u0131m\u0131m\u0131z\u0131 bitirdik.\u015eimdi tek yapmam\u0131z gereken son a\u015fama olan bu s\u0131n\u0131flar\u0131 kullanarak s\u0131k\u0131\u015ft\u0131rma i\u015flemini ger\u00e7ekle\u015ftirmek.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            ArchiveCreator ss = new WinBaseZipCreator(@&quot;D:\\Deneme\\arsiv.zip&quot;);\r\n            ArchiveObj xx = ss.GetArchieve();\r\n            xx.AddFile(@&quot;D:\\Deneme\\a.txt&quot;);\r\n            xx.AddFile(@&quot;D:\\Deneme\\b.PNG&quot;);\r\n            xx.AddFile(@&quot;D:\\Deneme\\c.docx&quot;);\r\n            xx.SaveArchive();\r\n        }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi art\u0131k dosyalar\u0131m\u0131z\u0131 bu \u015fekilde basit bir kullan\u0131mla s\u0131k\u0131\u015ft\u0131rabilmekteyiz.<br \/>\nProgram \u00e7al\u0131\u015ft\u0131r\u0131lmadan \u00f6nce &#8220;D:\\Deneme&#8221; dizininin g\u00f6r\u00fcnt\u00fcs\u00fc,<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/c-ile-dosya-s\u0131k\u0131\u015ft\u0131rma.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/c-ile-dosya-s\u0131k\u0131\u015ft\u0131rma.png\" alt=\"c# ile dosya s\u0131k\u0131\u015ft\u0131rma\" width=\"230\" height=\"169\" class=\"aligncenter size-full wp-image-2824\" \/><\/a><br \/>\nProgram \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131ktan sonra &#8220;D:\\Deneme&#8221; dizininin g\u00f6r\u00fcnt\u00fcs\u00fc,<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/c-ile-dosya-s\u0131k\u0131\u015ft\u0131rma-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/c-ile-dosya-s\u0131k\u0131\u015ft\u0131rma-2.png\" alt=\"c# ile dosya s\u0131k\u0131\u015ft\u0131rma 2\" width=\"233\" height=\"199\" class=\"aligncenter size-full wp-image-2825\" \/><\/a><br \/>\nOlu\u015fturulan &#8220;arsiv.zip&#8221; dosyas\u0131n\u0131n i\u00e7eri\u011fi,<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/c-ile-dosya-s\u0131k\u0131\u015ft\u0131rma-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/c-ile-dosya-s\u0131k\u0131\u015ft\u0131rma-3.png\" alt=\"c# ile dosya s\u0131k\u0131\u015ft\u0131rma 3\" width=\"588\" height=\"274\" class=\"aligncenter size-full wp-image-2827\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/c-ile-dosya-s\u0131k\u0131\u015ft\u0131rma-3.png 588w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/c-ile-dosya-s\u0131k\u0131\u015ft\u0131rma-3-300x139.png 300w\" sizes=\"auto, (max-width: 588px) 100vw, 588px\" \/><\/a><br \/>\nDosyalar\u0131 ar\u015fivden \u00e7\u0131kar\u0131p \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131da sizler kontrol ediniz \ud83d\ude42<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/07\/C-Dosya-S\u0131k\u0131\u015ft\u0131rma-\u00d6rnek-Proje.rar\" target=\"_blank\">C# Dosya S\u0131k\u0131\u015ft\u0131rma \u00d6rnek Proje<\/a><\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Uzun s\u00fcredir C#&#8217;ta dosya s\u0131k\u0131\u015ft\u0131rma konusunu ara\u015ft\u0131rmakta oldu\u011fumdan dolay\u0131 \u015fahsi kanaatim bu konu \u00fczerine net bir a\u00e7\u0131klama yapan pek bir kaynak bulunmad\u0131\u011f\u0131ndan yanad\u0131r.Bu yaz\u0131mda sizlere \u00e7ok g\u00fczel bir dosya s\u0131k\u0131\u015ft\u0131rma tekni\u011fi g\u00f6sterece\u011fim.\u0130\u015fin g\u00fczel yan\u0131&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,338],"tags":[27,616,617,615,619,620,618],"class_list":["post-2813","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","category-c-5-0","tag-c","tag-dosya-sikistirma","tag-rar","tag-system-io-packaging","tag-windowsbase","tag-windowsbase-dll","tag-zip"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=2813"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2813\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=2813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=2813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=2813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}