 |
|
 |
|
 |
19 - SHFILEOPERATION
|
|
|
|
PRÉSENTATION :
Programme de présentation de la fonction API ShFileOperation()
NOTES :
Cette fonction est très utile pour toutes les fonctions groupées de fichiers. Il est possible de copier/suprimer/décplacer des répertoires complets, de gérer les collisions de noms, la création
automatique des sous-répertoire en une seule opération. Cette fonction permet aussi de renommer des groupes de fichiers
Et autre avantage, elle accepte les caractères génériques * et ?.
CODE :
// Définition de la fonctionen Pascal, c'est plus facile à utiliser que l'API
//
// Définition d'un type ensemble pour les options de la fonctions
Type TSHFileOperationOptions = Set Of (oFOF_MULTIDESTFILES ,
oFOF_CONFIRMMOUSE ,
oFOF_SILENT ,
oFOF_RENAMEONCOLLISION ,
oFOF_NOCONFIRMATION ,
oFOF_WANTMAPPINGHANDLE ,
oFOF_ALLOWUNDO ,
oFOF_FILESONLY ,
oFOF_SIMPLEPROGRESS ,
oFOF_NOCONFIRMMKDIR ,
oFOF_NOERRORUI );
// Prototype de la fonction en Pascal
Function ShFileOperationPascal(Operation:Cardinal;NomsFROM,NomsTO:TStrings;
Options:TSHFileOperationOptions;Titre:String):Boolean;
Var Info :TSHFileOPStruct;
ChaineFROM :String;
ChaineTO :String;
fl :Word;
// Fonction interne de conversion d'un TStrings et Chaine à zéro terminal multiple.
// Le résultat est retourné en String plutot qu'en PChar pour plus de facilité de manipulation
Function ConcatTStrings(Liste:TStrings):String;
Var i:Integer;
Begin
If (Liste=Nil) Or (Liste.Count=0)
Then Result:=#0#0
Else Begin
Result:='';
For i:=0 To Liste.Count-1 Do Result:=Result+Liste[i]+#0;
Result:=Result+#0;
End;
End;
Begin
// Transformation des TStrings en Chaine à zéro terminal multiple.
ChaineFROM:=ConcatTStrings(NomsFROM);
ChaineTO :=ConcatTStrings(NomsTO );
Titre :=Titre+#0;
// Préparation des options sous forme de 'flag' pour la fonction API
fl:=0;
If oFOF_MULTIDESTFILES In Options Then Inc(fl,FOF_MULTIDESTFILES );
If oFOF_CONFIRMMOUSE In Options Then Inc(fl,FOF_CONFIRMMOUSE );
If oFOF_SILENT In Options Then Inc(fl,FOF_SILENT );
If oFOF_RENAMEONCOLLISION In Options Then Inc(fl,FOF_RENAMEONCOLLISION);
If oFOF_NOCONFIRMATION In Options Then Inc(fl,FOF_NOCONFIRMATION );
If oFOF_WANTMAPPINGHANDLE In Options Then Inc(fl,FOF_WANTMAPPINGHANDLE);
If oFOF_ALLOWUNDO In Options Then Inc(fl,FOF_ALLOWUNDO );
If oFOF_FILESONLY In Options Then Inc(fl,FOF_FILESONLY );
If oFOF_SIMPLEPROGRESS In Options Then Inc(fl,FOF_SIMPLEPROGRESS );
If oFOF_NOCONFIRMMKDIR In Options Then Inc(fl,FOF_NOCONFIRMMKDIR );
If oFOF_NOERRORUI In Options Then Inc(fl,FOF_NOERRORUI );
// Préparation de la structure TSHFileOPStruct qui contient tous les paramètres de la fonction
// Il n'est pas utile de donner une fenêtre parent pour la progresion si elle est affichée. Dans ce
// cas l'affichage de la progression n'est pas liée à votre application.
// Vous remarquerez que ChaineFROM et ChaineTO ne sont pas converties en PChar, mais
// on donne seulement l'adresse du premier caractère. Ceci est possible car les #0 ont été ajoutés
// dans les chaines au préalable.
// Le titre de la fenêtre n'est utilisé que si la progression est active et en mode simple,
// c'est à dire sans l'option oFOF_SILENT et avec l'option oFOF_SIMPLEPROGRESS
With Info Do
Begin
Wnd :=0; // Handle de la fenêtre parent de la progression
wFunc :=Operation; // Type d'opération
pFrom :=@ChaineFROM[1]; // Noms de fichiers en entrée
pTo :=@ChaineTO [1]; // Noms de fichiers en sortie
fFlags :=fl; // Options
fAnyOperationsAborted :=False; // Code de retour
hNameMappings :=Nil; // Mapping de retour des opérations effectuées
lpszProgressTitle :=@Titre[1]; // Tire de la fenêtre de progression
End;
Result:=Not Boolean(ShFileOperation(Info)) And Not Info.fAnyOperationsAborted;
End;
|
| |
 |
|
 |
Les sources présentées sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©
2003 Bruno Guérangé. Aucune reproduction,
même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E
de dommages et intérêts.
Cette page est déposée à la
SACD.
|