Neler yeni
Türkiye'nin En Güncel Forum Sitesi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

C ile rar şifresi kırma dosya parçalama ve bölme

ByOnur58

Kayıtlı Üye
MFC Üyesi
  • Üyelik Tarihi
    7 Ocak 2015
  • Mesajlar
    2,113
  • MFC Puanı
    10
  • MFC Seviyesi

Kod:
#include<stdio.h>
#include<stdlib.h>
#define MAKS_ISIM 100                                                           /*Dosya icin maksimum isin sabiti*/
#define TEK_ISIM 30

FILE *ilk, *cikti;                                                              /*Dosya degiskenleri*/

int main()
{    
    float a;
    int ye=0;
    short i=0,x=0,c=1,d, secim1, secim2 ,secim3,secim4, birbas=48, ikibas=48;
    char  fonk[MAKS_ISIM],dosyayolu[MAKS_ISIM],al, isim[TEK_ISIM];
    unsigned long int krkter_sayi=0,aktarilan=1;                                /*krkter_sayi değişkeni yüksek sayı tutabileceğinden böyle*/
    
    bas:
    
    printf("1-Dosya Bolmek(En fazla 99 parca)\n2-Dosya birlestirmek\n3-Rar sifresi kirmak");
    scanf("%d", &secim1);
    
    if (secim1 == 1)
    {
               system("cls");                                                   /*Ekran siler*/
               tekrar1:
                       
               fflush(stdin);                                                   /*Bu fonksiyon klavye girişini temizler.*/
                       
               printf("Dosyayi Yolu, Ismi ve Uzantisiyla Giriniz: (Ornek C:\\Yeni\\naber.txt): \n");
               gets(dosyayolu);
               
               if((ilk = fopen(dosyayolu, "rb"))==NULL)
               {
                          system("cls");
                          printf("Dosya acilamiyor. Lutfen tekrar deneyiniz\n\n");                       
                          goto tekrar1;                                            
               }               
              
               
               while(dosyayolu[i]!='\0')                                        /*strlen yazmadım mantık anlaşılsın. bu ise aklıma geldi :)*/
               {                                                                /*dosyayolu değişkeninin kaç karakter olduğunu yazar*/
                          i++;                   
               }
               
               c=i;
               
               while(dosyayolu[i-1]!='\\')                                      /*Burada girilen dosya yolundan dosyanın ismini alıyoruz.*/
               {
                          isim[x]=dosyayolu[i-1];                               /*Kullanıcı uzantısı olmayan dosya girerse diye önlemimiz var */
                          x++;
                          i--;
                          if(i==0)                                                 
                          break;                                                   
               }
               isim[x]='\0';                                                    /*Yukarıdaki işte bu yüzden gerekmiyordu '\0' deyince */
               
               a=(float)(x-1)/2;
               
               for(i=0;i<a;i++)
               {                                                                /* strrev kullanılabilir mantık açısından böyle yaptım*/
                          isim[i]^=isim[x-i-1];
                          isim[x-i-1]^=isim[i];
                          isim[i]^=isim[x-i-1];                              
               }  
               system("cls");
                                   
               printf("Dosyanizin ismi \"%s\" ise devam etmek icin 1 e basin.",isim);
               scanf("%d",&secim2);
               
               if(secim2==1)       {}
               else                {return 0;}
               
               while(dosyayolu[c-1]!='\\' )                                     /* Bu döngü örneğin dos.txt dosyasını dos00.txt yapar.*/
               {
                          
                          if(dosyayolu[c-1]=='.')  
                          {
                                     dosyayolu[c+5]='\0';
                                     dosyayolu[c+4]=dosyayolu[c+2]; 
                                     dosyayolu[c+3]=dosyayolu[c+1]; 
                                     dosyayolu[c+2]=dosyayolu[c];   
                                     dosyayolu[c+1]='.';  
                                     dosyayolu[c]=birbas; 
                                     dosyayolu[c-1]=ikibas;           
                                     d=c;
                                     break;
                          }
                          
                          c--;   
                          
                          if(c==1)                                              
                          break;                                              
               }
               
               system("cls"); 
              
               printf("Parcalanmis %s dosyalarinin isimleri ve kayit yerleri \n%s olacak.",isim,dosyayolu);
               printf("\n\nKblara bolmek icin normal sayi girin. Mb bolmek icin 1024 kati girin: ");
               scanf("%d",&secim3);
                          
               krkter_sayi=secim3*1024;                                         /*Girilen syıyı kb a çevirir. 1024 girilirse 1 mb olur.*/
               
               cikti=fopen(dosyayolu,"wb");                                     /*örnek dos00.txt wb modunda açılır*/
                     
               while(!feof(ilk))                                      /*dos.txt "ilk" e aktarılmıştı. dosya sonuna kadar karakter oku */
               {
                          al=fgetc(ilk);          
                          if(krkter_sayi>aktarilan)                             /*Burada bizim verdiğimiz sınır belirleniyor*/
                          {
                                     fputc(al, cikti);                          /*yeni cıktıya koyuluyor.*/
                                     aktarilan++;          
                          }
                                          
                          if(krkter_sayi==aktarilan)                            
                          {
                                     fputc(al, cikti);                          /*son karakteride koyduk*/
                                     fclose(cikti); 
                                     printf("\n%s olusturuldu",dosyayolu);      /*ekrana bittiğini yazdık*/
                                     dosyayolu[d]=++birbas;                     /*dos00.txt idi ya ilk basamağı arttırıyoruz. dos01.txt*/
                                                     
                                     if(birbas==58)                             /*57 asci kodu 9 idi yukarda 9 döndürülmesi lazımdı bu yüzden 58*/
                                     {
                                                dosyayolu[d-1]=++ikibas;        
                                                birbas=48;
                                                dosyayolu[d]=birbas;            /*burda mesela dos10.txt yaptık*/                     
                                                
                                                if(ikibas==58)                  /*iste programımızın demo özelliği :) 99 parça olcaktı*/
                                                {
                                                           system("cls");
                                                           printf("99 parca destekliyoruz daha parcalama yapamayiz.\n1-Basa don.\n2-Cıkıs");
                                                           scanf("%d",&secim4);
                                                           
                                                           if(secim4==1)       {goto bas;}
                                                           else                {return 0;}
                                                }
                                     }
                                     
                                     cikti=fopen(dosyayolu,"wb");               /*yukarıda oluşan yeni isimli parçalı dosyayı burda açıyoruz*/
                                     aktarilan=1;                               /*aktarılan ı 1 yapalım demi :)*/
                          }
               }
               fclose(ilk);                                                     /*işlem bitti dosyamızı kapatalım*/
    }
    
    /*Dosya birlestirme islemleri*/
    
    else if (secim1 == 2)
    {
               system("cls");
               printf("Simdilik yapim asamasinda :) ");
    }
    
    else if (secim1 == 3)
    {
               system("cls");
               
               printf("Pc nizde Winrar kurulu olmasi gerekmektedir ve lütfen winrar C:\\Program Files\\Winrar yerinde olsun.\n\n");
               printf("Sifresi cozulecek rar dosya yolunu ismi ve uzantisiyla giriniz. (D:\\dosya.rar):\n");
               scanf("%s",dosyayolu);
               
               for(ye=0;ye<100000 && c!=0;ye++)
               {
               sprintf(fonk,"C:\\Progra~1\\winrar\\rar.exe t -inul -p%d %s",ye,dosyayolu);
               c=system(fonk);
               
               printf("%d\n",ye);
                       
               }
               system("cls");
               printf("sifreniz %d",ye-1);
               scanf("%s",dosyayolu);
    }
    
    
    
    
    
    else
    {
        printf("Galiba cikmak istion. Bas bir tusa cik hadi\n\n");
        return 0;
    }
        
    return 1;
}
 
Üst Alt