1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
| private:
//---------------
// Dans la partie private de la class
//
private: // Déclarations de l'utilisateur
TStringList* FFileList;
TJclFileEnumerator* FFileEnumerator;
bool FbDelete;
//--- Methode $DVS
void __fastcall TaskDone(const TFileSearchTaskID ID,const bool Aborted);
void __fastcall MoveFiles(bool DoDelete=true);
.....
//---------------------------------------------------------------------------
void __fastcall TForm1::TaskDone(const TFileSearchTaskID ID,const bool Aborted)
{
TStringList* Result;
bool bProcess;
AnsiString sSrc,sDst,sRepDst;
//
// Seulement apres la derniere passe
//
if (ID == 1) {
//
// La liste est faite, executer la copie des fichiers
//
try {
#ifdef _DEBUG
//
// En mode debug, copier la liste des fichiers pour affichage
//
Result = new TStringList;
Result->Text = FFileList->Text;
Result->Add("****");
#endif
//
// Boucle de copie des fichiers, du premier vers le dernier
//
for (int i = 0; i < FFileList->Count; i++) {
bProcess = true;
//
// Source
//
sSrc = FFileList->Strings[i];
//
// Nom complet de Destination
//
sDst = ExChangeIODir(sSrc);
#ifdef _DEBUG
//
// En mode debug, ajouter le fichier a la liste
//
Result->Add(sDst);
#endif
//
// Repertoire de destination
//
sRepDst = ExtractFileDir(sDst);
//
// Verifier l'existence du repertoire de destination et
// si l'utilisateur a les droits de le créer
//
if (!Sysutils::DirectoryExists(sRepDst)) {
//
// Si creation du repertoire impossible, sortie brutale
//
if (!Sysutils::ForceDirectories(sRepDst)) {
//
// Mettre fin a la copie
//
bProcess = false;
#ifdef _DEBUG
Result->Add("Erreur Fatale");
#endif
break;
}// End IF
}// End IF
//
// Copier et supprimer le fichier ?
//
if (bProcess) {
//
// Copier le fichier
//
bProcess = CopyFile(FFileList->Strings[i].c_str(),
sDst.c_str(),false);
//
// Supprimer le fichier ?
//
if (bProcess && FbDelete)
FileDelete(FFileList->Strings[i].c_str());
}// End IF
}// End For
#ifdef _DEBUG
//
// En mode debug, afficher le resultat de la recherche de
// fichier
//
try {
DirListFrm = new TDirListFrm(Application);
//
// Charger la liste
//
DirListFrm->Memo1->Clear();
DirListFrm->Memo1->Text = Result->Text;
DirListFrm->ShowModal();
}
__finally {
delete DirListFrm;
}
#endif
//
// Fin du process de copie des fichiers, supprimmer le repertoire
// de source, si la copie est effective
//
if (bProcess) {
//
// Supprimer le(s) repertoire(s) source ?
//
if (FbDelete)
DelTree(FFilePath->InputPath+"\\"+FFilePath->FileName);
//
// Trace de l'operation
//
SaveLog();
}// End If
}
__finally {
#ifdef _DEBUG
//
// Cleanup en mode debug
//
if (Result)
delete Result;
#endif
}
}// End IF
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MoveFiles(bool DoDelete)
{
//
// Flag d'effacement des fichiers
//
FbDelete = DoDelete;
//
// Creation de la liste si necessaire
//
if (!FFileList)
FFileList = new TStringList;
else
FFileList->Clear();
//
// creation de FFileEnumerator
//
FFileEnumerator = new TJclFileEnumerator;
//
// Premiere passe, lecture des fichiers
//
FFileEnumerator->RootDirectory = FFilePath->InputPath;
FFileEnumerator->FileMask = FFilePath->FileName + ".*";
FFileEnumerator->IncludeSubDirectories = false;
FFileEnumerator->OnTerminateTask = TaskDone;
//
// Executer: Lecture des fichiers [FFilePath->FileName].*
//
FFileEnumerator->FillList(FFileList);
//
// Deuxieme passe, lecture des sous repertoires,....
//
FFileEnumerator->RootDirectory = FFilePath->InputPath+"\\"+
FFilePath->FileName;
FFileEnumerator->FileMask = "*.*";
FFileEnumerator->IncludeSubDirectories = true;
FFileEnumerator->OnTerminateTask = TaskDone;
//
// Executer: Lecture du contenu des sous repertoires
//
FFileEnumerator->FillList(FFileList);
} |
Partager