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;
}