• 간단한 자기 복제 (simply self-replication)
    프로그래밍/C# + Unity 2019. 2. 12. 22:55
    728x90

    class Copier {
        public void SelfCopier(String ExeName, String Destination) {
            string path = Directory.GetCurrentDirectory() + @"\\" + ExeName;
            FileInfo fileInfo = new FileInfo(path);
            long filesize = fileInfo.Length;
    
            long ahrt = filesize / 1024; //몫
            int skajwl = ((filesize % 1024) == 0 ? 1024 : 0); //나머지
    
            /* 파일을 읽어 로직에 담음 */
            BinaryReader brfile = new BinaryReader(File.OpenRead(path));
    
            byte[] tmpd_0 = new byte[1024];
            byte[] tmpd_9 = new byte[skajwl];
    
            for (long i = 1; i <= ahrt; i++) {
                BinaryWriter bwfile = new BinaryWriter(File.OpenWrite(Destination + i));
                if (i == ahrt) {
                    tmpd_9 = brfile.ReadBytes(skajwl);
                    bwfile.Write(tmpd_9);
                    bwfile.Close();
                } else {
                    tmpd_0 = brfile.ReadBytes(1024);
                    bwfile.Write(tmpd_0);
                    bwfile.Close();
                }
            }
            brfile.Close();
            /* 파일을 읽어 분할 후 저장 */
    
            /* 분할한 파일을 읽어 하나로 만듦*/
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(Destination));
            for (int i = 1; i <= ahrt; i++) {
                BinaryReader br = new BinaryReader(File.OpenRead(Destination + i));
                FileInfo fi = new FileInfo(Destination + i);
                if (i == ahrt) {
                    tmpd_9 = br.ReadBytes(skajwl);
                    bw.Write(tmpd_9);
                    bw.Flush();
                } else {
                    tmpd_0 = br.ReadBytes(1024);
                    bw.Write(tmpd_0);
                    bw.Flush();
                }
                br.Close();
                fi.Delete();
            }
            bw.Close();
            /* 분할한 파일을 읽어 하나로 만듦 */
        }
    }

     

    자기 스스로를 이진 읽기로 읽어 들인 후 적당한 사이즈(1024bytes)로 분할하여 목적지로 이동 후 목적지에서 재조합 하여 자기 복제를 수행하는 함수


    728x90

    댓글

Copyright ⓒ syudal.tistory.com