《我的编程笔记》C#篇-如何让一段代码自我复制

以前总是听说病毒的特征是1.隐藏2.自我复制3.传播等等。

当时听起来很牛x但是事实并不是很难。

下面是一段我写的简略的程序自我复制代码(c#)

private void button1复制文件_Click(object sender, EventArgs e)
        {
            string _file = Application.ExecutablePath; //当前程序的完整文件名
            string _path = Path.GetDirectoryName(_file);//当前程序的所在的目录名
            string _name = Path.GetFileName(_file);//当前程序的文件名

            string target_path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            target_path += "\\test";//要复制到得目录 桌面上的test文件夹中(桌面必须先建立此文件夹)
            Directory.CreateDirectory(target_path);            //在桌面创建test文件夹

            int i = 100;
            while (i > 0)
            {
                FileStream fs = new FileStream(_file, FileMode.Open, FileAccess.Read);
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
                fs.Close();
                //读取程序的原字节内容
                try
                {
                    FileStream nfs = new FileStream(target_path + "//0" + Convert.ToString(i) + ".exe", FileMode.Create, FileAccess.Write);

                    nfs.Write(buffer, 0, buffer.Length);

                    i--;//复制次程序一百次
                }
                catch
                {
                    MessageBox.Show("程序出错");
                    Close();
                }
            }
        }

        private void button2遍历文件夹_Click(object sender, EventArgs e)
        {
            string str = "";
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                str = folderBrowserDialog1.SelectedPath;
            }

            //获取根目录的文件夹
            string[] folders = Directory.GetDirectories(str);

            //用于记录文件夹个数
            count += folders.Length;

            //想遍历文件夹的函数中传递上级文件夹
            foreach (string path in folders)
            {
                traversal(path);//呼叫遍历程式
            }
            MessageBox.Show("你所指定的目录中共有文件夹数为:"+Convert.ToString(count));//显示某磁盘文件夹总数
        }

        private void traversal(string path)//遍历程序
        {
            //从获取的文件夹中获取文件夹对象
            string[] folders = { };
            if (path.Contains("System") == false)
                folders = Directory.GetDirectories(path);

            //文件夹计数器等于已有的文件夹数量加新遍历出来的文件夹数量
            count += folders.Length + 1;

            //循环遍历每个文件夹
            foreach (string _path in folders)
            {
                traversal(_path);//递归遍历
            }
        }

你可能感兴趣的:(编程,String,C#,buffer,Path,traversal)