如何创建基本包来存储图像?

时间:2018-05-29 09:05:39

标签: c#

如何创建基本包来存储图像,比如zip文件?

我想要做的就是将20000张图像存储在一个包中。我的硬盘会更容易。

此外,我需要能够使用C#代码进入和退出该包,读/写,添加/删除文件。

另一种文件格式是.iso,它接近我想要的,但操作起来很复杂。

我想要一些非常基本但不复杂的东西。如果可能,基本作为库。

有这样的事吗?

2 个答案:

答案 0 :(得分:0)

如果您决定使用虚拟硬盘,则步骤如下: 在计算机管理中右键单击磁盘管理,然后在本地菜单中单击“创建VHD”。使用您喜欢的参数创建虚拟硬盘。我推荐.vhdx并动态扩展风味。在此之后,您有一个已安装,未初始化,未格式化的硬盘驱动器。 用必要和常用的步骤准备它。因此,您将拥有一个带有指定驱动器号的硬盘驱动器。 将它用作您拥有的任何硬盘。

重启后,它不会自动挂载,您必须在磁盘管理中手动执行,或使用计划任务挂载驱动器。这是脚本:https://gallery.technet.microsoft.com/scriptcenter/How-to-automatically-mount-d623ce34

您也可以在磁盘管理中卸载它。

您可以将文件yourdiskname.vhd(x)复制到其他计算机并使用它。

答案 1 :(得分:0)

谢谢大家的意见

它帮助我决定并指导我在许多网络搜索战斗后找到的答案。

我找到了一个实用的解决方案,但并不像我想要的那样高效。 从zip文件中循环图像时,移动速度很慢,因为它正在解压缩每个文件。我必须重新考虑代码并将其全部解压缩到流或某些列表中。我再看看吧。现在,工作,我很高兴:)

以下是我提出的结果:

//My code so far - not very efficient but is working.
using Ionic.Zip;
using Ionic.Zlib;

        string zipPath = "0Images.zip";
        void CountZipFiles()
        {
            using (ZipFile zip = new ZipFile(zipPath))
            {
                totalzipFiles = zip.Count-1;
            }
        }
        Image emptyImage = Image.FromFile("emptyFemale.jpg");
        void ReadZipImage()
        {
            using (ZipFile zip = new ZipFile(zipPath))
            {
                MemoryStream tempS = new MemoryStream();
                for (int i = 0; i < zip.Count; i++)
                {
                    if (i == countMyZipImages)
                    {
                        label1.Text = zip[i].FileName;
                        if (zip[i].FileName.Contains(".niet"))
                        {
                            pictureBox1.Image = emptyImage;
                        }
                        else
                        {
                            zip[i].Extract(tempS);
                            pictureBox1.Image = Image.FromStream(tempS);
                        }
                    }
                }
            }
        }

        int totalzipFiles = 0, countMyZipImages = 0;
        private void button2_Click(object sender, EventArgs e)
        {
            countMyZipImages--;
            if (countMyZipImages < 0) countMyZipImages = totalzipFiles;
            textBox1.Text = countMyZipImages.ToString();
            ReadZipImage();
        }
        private void button3_Click(object sender, EventArgs e)
        {
            countMyZipImages++;
            if (countMyZipImages > totalzipFiles) countMyZipImages = 0;
            textBox1.Text = countMyZipImages.ToString();
            ReadZipImage();
        }
// and this is a HELP file for later use - hopefully will help others too. ;)

How to add Ionic.Zip.dll in c#.net project and use it:

To add a reference, right click (in Solution Explorer on your project) Reference folder and select Add Reference.
Then browse and add the file Ionic.Zip.dll

//Important to add this using's too after referencing.
using Ionic.Zip;
using Ionic.Zlib;


        private void CreateZIP_Click(object sender, EventArgs e)
        {
            using (ZipFile zip = new ZipFile())
            {
                // add this map file into the "images" directory in the zip archive
                zip.AddFile("c:\\images\\personal\\7440-N49th.png", "images");
                // add the report into a different directory named "files" in the archive
                zip.AddFile("c:\\Reports\\2008-Regional-Sales-Report.pdf", "files");
                zip.AddFile("ReadMe.txt");
                zip.Save("MyZipFile.zip");

                Exception ex = new Exception();
                label1.Text = ex.Message;
            }
        }


        //You can extract to a stream, or a fizical file ! 
        private void button5_Click(object sender, EventArgs e)
        {
            using (ZipFile zip = new ZipFile("0Images.zip"))
            {
                MemoryStream tempS = new MemoryStream(); //stream

          //{      
                foreach (ZipEntry ze in zip)        //foreach
                {
                    // check if you want to extract the image.name 
                    if (ze.FileName == "00002 Riley Reid.jpg")
                    {
                        ze.Extract(tempS);
                        pictureBox1.Image = Image.FromStream(tempS);
                    }
                }
           //OR
                for (int i = 0; i < zip.Count; i++)  //for
                {
                    if (i == countMyZipImages)
                    {
                        zip[i].Extract(tempS);
                        pictureBox1.Image = Image.FromStream(tempS);
                    }
                }
           //}     

            }
        }

这是我在互联网上找到的免费图书馆!我喜欢它,因为它很少 - 435kb。如果他们想要使用它,我会找到其他链接。 Dropbox - Ionic.Zip.dll [^]