C++ ile dosya dizin işlemleri için sınıf örneği CFile.h

/*———————————————————————-

File        :CFile.H  Test

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 ile  yerel fonksiyon gibi gösterilip performas yükseltildi

—————————————————————————-*/

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::DeleteFolder(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 & 0×10) /*FA_DIREC    0×10        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_name,“\\”);

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::Deltree(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 & 0×10) /*FA_DIREC    0×10        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

0 Yanıt, “C++ ile dosya dizin işlemleri için sınıf örneği CFile.h”


  1. Yorum yapılmamış

Yorum Yapın

Yorum yapabilmeniz için giriş yapmanız gerekli.




 

Ağustos 2007
M T W T F S S
« Jul   May »
 12345
6789101112
13141516171819
20212223242526
2728293031  

Top Clicks

  • Hiçbiri