C++ Klasör ve Dosya İşlemleri İçin Kullanabileceğiniz Bir Sınıf

CaPTaNBLaCK Yeni Üye
Altdizinlerle birlikte dosya ve klasör kopyalamak ve silmek Bir dosyayı ve belirtilen byte (ofset) kadar kopyalamak, Klasik dosya işlemleri.
/*----------------------------------------------------------------------
File:CFile.H
Author:Huseyin Bora Abaci
Last Update:24.01.2005
Platform:Windows
Compiler:Borland C++Builder
-----------------------------------------------------------------------*/
--------------------------------------------------------------------------------


-----------------------------------------------------------------------*/
#ifndef _CFile_H_
#define _CFile_H_
//-----------------------------------------------------------------------
#include "stdio.h"
#include "stdlib.h"
//-----------------------------------------------------------------------
#include "dos.h"
#include "dir.h"
//-----------------------------------------------------------------------
#define _MAX_FILE_NAME (500)
#define _MAX_COPY_FNAME (260)

class CFile {
protected:
FILE *In ,*Out;
__int64 Size;

public:
CFile(){Size=0;}//Kurucu
int FileCopy(char CopyFile[],char NewFile[]);
int FileByte(char ReadFile[],char WriteFile[],long Byte);
int FileSize(char FileName[]);
void __fastcall CopyTree(char FolderName[_MAX_PATH],char Asterik[],char FolderCopy[_MAX_PATH]);
void __fastcall Deltree(char FolderName[]);
void __fastcall MoveTree(char DeleteFolder[_MAX_PATH],char FolderCopy[_MAX_PATH]);
bool FileDelete(char FileName[]);
bool NewFolder(char FolderName[]);
bool DeleteFolder(char FolderName[]);
bool MoveFile(char DeleteFile[],char CopyFile[]);
};



/*----------------------------------------------------------------------------
Dosyanın Bir kopyasını oluşturmak için yazdığım fonksiyon
kopyalama işlemi başarılı olduğunda kopyalanan byte kadar geri döşüş değeri alır
hata durumunda sıfır
----------------------------------------------------------------------------*/
--------------------------------------------------------------------------------


inline int CFile::FileCopy(char CopyFile[],char NewFile[])
{
if((In=fopen(CopyFile,"rb"))==NULL)return 0;
if ((Out=fopen(NewFile,"wb"))==NULL)return 0;
Size=0;
while(!feof(In))
{
if(!feof(In))putc(getc(In),Out);
Size++;
}
fclose(In);
fclose(Out);
return Size;
}



/*----------------------------------------------------------------------------
Dosyanın Belirtilen Byte ına kadar kopyalayan fonksiyon
kopyalama işlemi başarılı olduğunda kopyalanan byte kadar geri döşüş değeri alır
hata durumunda sıfır
----------------------------------------------------------------------------*/

--------------------------------------------------------------------------------


inline int CFile::FileByte(char ReadFile[],char WriteFile[],long Byte)
{
if((In=fopen(ReadFile,"rb"))==NULL)return 0 ;
if((Out=fopen(WriteFile,"wb"))==NULL)return 0 ;
Size=0;
while(!feof(In))
{
Size++;
putc(getc(In),Out);
if(Size==Byte)break;
}
fclose(In);
fclose(Out);
return Size;
}



/*----------------------------------------------------------------------------
Dosyanın byte cinsinden boyutunu döndüren fonksiyon
----------------------------------------------------------------------------*/

--------------------------------------------------------------------------------


inline int CFile::FileSize(char FileName[])
{
if((In=fopen(FileName,"r+"))==NULL)
return 0;
fseek(In,0L,SEEK_END);
return ftell(In);
fclose(In);
}



//Klasik Dosya işlemleri

--------------------------------------------------------------------------------


//---------------------------------------------------------------------------
bool CFile::FileDelete(char FileName[])
{
if(remove(FileName))
return true;
}
//----------------------------------------------------------------------------
bool CFile::NewFolder(char FolderName[])
{
if(mkdir(FolderName))
return true;
}
//----------------------------------------------------------------------------
bool CFile:eleteFolder(char FolderName[])
{
if(rmdir(FolderName))
return true;
}
//Dosya Taşı
//----------------------------------------------------------------------------
bool CFile::MoveFile(char DeleteFile[],char CopyFile[])
{
FileCopy(DeleteFile,CopyFile);
if(remove(DeleteFile))
return true;
}



/*----------------------------------------------------------------------------
Dizin yapısını olduğu gibi kopyalayan fonksiyon
----------------------------------------------------------------------------*/
--------------------------------------------------------------------------------


void __fastcall CFile:: CopyTree(char FolderName[_MAX_PATH],char Joker[],char FolderCopy[_MAX_PATH])
{
struct ffblk fp;
int States;
char NextNewFolder[_MAX_FILE_NAME], Files1[_MAX_FILE_NAME], Files2[_MAX_FILE_NAME], FA[_MAX_FILE_NAME], Folder[_MAX_FILE_NAME], NextSourceFolder[_MAX_FILE_NAME];
sprintf(FA,"%s%s",FolderName,Joker);
States =findfirst(FA,&fp,0|FA_DIREC|FA_HIDDEN);
while(!States)
{
if(fp.ff_attrib & 0x10) /*FA_DIREC 0x10 Directory */
{
sprintf(Folder,"%s%s",FolderCopy,fp.ff_name);
if((strcmp(fp.ff_name,".")>1) && (strcmp(fp.ff_name,"..")>1))
{
mkdir(Folder);
sprintf(NextSourceFolder,"%s%s%s",FolderName,fp.ff _name,"\\");
sprintf(NextNewFolder,"%s%s%s",FolderCopy,fp.ff_na me,"\\");
CopyTree(NextSourceFolder,Joker,NextNewFolder);
}
}
sprintf(Files1,"%s%s", FolderName,fp.ff_name);
sprintf(Files2,"%s%s",FolderCopy,fp.ff_name);
FileCopy(Files1,Files2);
States=findnext(&fp);
}
findclose(&fp);
}




//------------------------------------------------------------------------
/*Verilen Dizin yapısını olduğu gibi kaldıran fonksiyon*/
//------------------------------------------------------------------------

--------------------------------------------------------------------------------


void __fastcall CFile:eltree(char FolderName[])
{
struct ffblk *fd=new ffblk;
char files[_MAX_FILE_NAME],FA[_MAX_FILE_NAME],Folder[_MAX_FILE_NAME]="";
sprintf(FA,"%s%s",FolderName,"*.*");
findfirst(FA,fd,0|FA_DIREC|FA_HIDDEN);
do
{
if(fd->ff_attrib & 0x10) /*FA_DIREC 0x10 Directory */
if((strcmp(fd->ff_name,".")>1) && (strcmp(fd->ff_name,"..")>1))
{
sprintf(Folder,"%s%s%s",FolderName,fd->ff_name,"\\");
Deltree(Folder);
if(rmdir(Folder)); //Burda Bir Gecikme Gerikyordu if(rmdir(Folder)) ile gecikme sağlandı
if(rmdir(Folder));
}
if((strcmp(fd->ff_name,".")>1) && (strcmp(fd->ff_name,"..")>1))
{
sprintf(files,"%s%s",FolderName,fd->ff_name);
if(remove(files));
}
}
while(!findnext(fd));
findclose(fd);
}


//Verilen Dizin yapısını taşıyan fonksiyon

--------------------------------------------------------------------------------


void __fastcall CFile::MoveTree(char DeleteFolder[_MAX_PATH],char FolderCopy[_MAX_PATH])
{
NewFolder(FolderCopy);
CopyTree(DeleteFolder,"*.*",FolderCopy);
Deltree(DeleteFolder);
rmdir(DeleteFolder);
}
#endif//header dosya sonu



Sınıfınfı nasıl kullanacaksınız

#include <CFile>
main (){
CFile *File1 =new CFile();
File1->CopyTree("C:\\Windows","*.*","D:\\Test");
File->FileByte("C:\\Prog.exe","C:\\200Byte.exe",200); //Dosyanın ilk 200 byte nını kopyalar
}
 
Üst