《我的编程笔记》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文件夹中(桌面必须先建立此文件夹)
            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);//递归遍历
            }
        }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值