cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 2011
-
2 avril 2005 à 13:16
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 2006
-
10 avril 2005 à 20:13
Voici une question pour les spécialistes des API et du fonctionnnement des machines.
J'aimerais connaître les avantage et inconvénient de ces deux fonctions sachant que :
- CopyFile est une fonction API
- File Copy est une commande DOS
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 2 avril 2005 à 16:40
filesystemobject nécessite scrrun.dll si tu te sers de la référence que j'ai indiqué plus haut. Sinon, tu peux t'en passer si tu déclares tout en Object. C'est ce qu'on fait en vbs, asp, ...
Pourquoi c'est à éviter ? J'aimerais bien aussi une réponse précise quoique j'en connais quelques éléments. Mais si on va dans ce sens, il faut éviter tellement de choses en vb qu'il vaut mieux abandonner tout de suite.
Personnellement, j'utilise le plus souvent FileCopy, Dir et Kill sachant qu'il y a un inconvénient en cas de chemin réseau.
Par ex, un dir("[file://\\serveur\dossier \\serveur\dossier]") plante si tu n'as pas de connexion réseau valide alors que dir("k:\dossier") te renvoie bien "" si k:\ ou k:\dossier n'existe pas.
Ces fonctions sont héritées du DOS, faut pas leur en vouloir de ne pas savoir gérer correctement les chemins réseau.
Sinon, dans nombre de cas, j'utilise les api windows, je ne vais quand même pas réinventer la roue à chaque fois.
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 2 avril 2005 à 13:23
Salut,
Comme toutes Api le principal défaut c'est en cas de problème. l'Api à en effet de grandes chances de planter le pc. Donc à utiliser avec parcimonie.
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 2 avril 2005 à 13:43
OK pour le danger des API mais cela ne répond pas à ma question.
Dans le cas d'une "simple" copie de fichier, quelle est la meilleure des 2 pour travailler rapidement, sûrement, facilement ?
Programmix
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 2 avril 2005 à 13:48
Salut,
Si tu prog en vb.net, tu as aussi :
System.IO.File.Copy(CheminFichierDepart, CheminFichierArrivee)
Sinon, avec l'api CopyFile, en une seule ligne de commande, tu peux dire si tu écrases ou non le fichier destination (s'il existe déjà) sans planter le prog alors qu'avec FileCopy, il faut que tu testes d'abord s'il existe déjà avec un dir(...) et que tu utilises un Kill d'abord si tu veux l'écraser ......
Tu as aussi les méthodes avec FileSystemObject (référence Microsoft Scripting runtime).
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 2 avril 2005 à 13:56
Voilà qui est déjà plus parlant.
Jusqu'à maintenance, je n'ai jamais utilisé les méthodes avec FileSystemObject.
Est-ce mieux ?
Est-ce que cela ne nécessite pas des dll en plus en cas de déploiement de l'application ?
Je programme en VB6 (et oui, toujours pas passé le cap).
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 10 avril 2005 à 07:10
Moi aussi je voudrais bien savoir pourquoi le FSO est a éviter!!!
Il est tellement pratique que le bon vieux DOS et autres APIs que franchement, s'en passer serait, pardonnez-moi, une connerie puisqu'il existe et fonctionne parfaitement!
Et comme dit le loup, si faut s'en passer, autant passer à autre chose car après tout le VB est quand même fait pour développer rapidos sans se prendre le choux avec des considérations inconsidérées je trouves. Sinon, ben faut passer au C.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 10 avril 2005 à 18:31
Alain, puisque tu es à l'écoute, que c'est toi qui a dis, sans autre explication, qu'il faut éviter le filesystemobject et que tu es Admin CS, pourrais-tu nous éclairer sur ce point plutôt que sur la grammaire ?
Au passage, "considérations inconsidérées" c'est du français, même si c'est maladroit, voir le dico.
Par le jeu des synonymes, je pourrais même dire en bon français que je me demande pourquoi je considère ta considération sur les "considérations inconsidérées" alors que je considère que cette considération, considérée ou non, n'a pas lieu d'être prise en considération dans le cas présent.
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 10 avril 2005 à 18:54
Heureusement pour moi la langue française m'est pas aussi rigide que certains langages de programmation ou que certains esprits et le "dico" ne donne aucune contre-indication à user de styles (vous savez, un peu comme les CSS ;-). Fallais bien entendu capter la légère irone de l'apparent paradoxe de cette formule... vous l'avez remarqué, tant mieux.
Mais en effet, on aimerait tous ici avoir le point de vue, j'en suis intimement persuadé, constructif, de Alain qui, je dois l'admettre m'intrigue (pas Alain, son point de vu bien sûr!).
Surtout que personnellement, j'habuse passablement du FSO dans mes codes.
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 10 avril 2005 à 19:40
j'ai noté que c'est amusant c'est tout je n'ai pas dit que c'était incorrect :p
Pour FilesystemObject je le déconseille pour une raison simple, il est intermédiaire entre l'api et vb : la méthode CopyFile d'un objet FSO est un appel à l'api CopyFile, mais ce n'est pas toi gère l'appel l'api, ni vb, c'est le FSO. ( c'est pourquoi beaucoup d'utilisateurs l'aiment bien, c'est plus facile à mettre en oeuvre que déclaration + appel d'une api... )
Quand tu crées un objet FSO, tu fais appel à un certain nombres de constructeurs, ce qui ralenti l'éxécution à ce moment là mais peut etre interessant pour la suite, si on déteste manipuler les apis et si on a beaucoup d'opération sur les fichiers/dossiers.
Mais même dans ce cas, l'appel direct aux apis déclarées depuis vb est plus rapide que FSO car je le repète, fso va se contenter d'appeller ces apis...
Il vaut mieux déclarer ses apis soit même pour savoir ce qui existe et comment ca se manipule, dans l'optique de manipuler de mieux en mieux les apis, car il n'y a pas toujours des scripts intermédiaires pour faciliter la manipulation des objets...
Voilà ça n'est que ma propre opinion, en clair je pense qu'il vaut mieux utiliser sois les fonctions intégrées à vb, sois les apis, car la création de l'objet FSO en lui même puis les constructeurs de FSO ralenti terriblement un code, alors que l'appel direct à l'api depuis vb6 ralenti beaucoup moins.
Il me semble d'ailleur que y a une source ici sur vbfrance de moi-même qui compare la vitesse par FSO et par api pour explorer un disque dur ( mais ca remonte à très longtemps )
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 10 avril 2005 à 20:11
J'avais déposée en son temps une source de ce genre permettant ainsi de comparer "3 MÉTHODES DE RECHERCHE RÉCURSIVE DE FICHIERS" (
http://www.vbfrance.com/code.aspx?id=5089)
Mais à l'époque, je ne comprenais pas grand chose aux API. Maintenant, j'en ai moins peur...
En voici la présentation :
Lorsque je me suis mis à chercher des méthodes de recherche récursive de fichiers, j'ai été confronté à des sources utilisant des méthodes différentes que j'ai cherché à comprendre.
Puis voyant que ce thème était souvent recherché, j'ai regroupé 3 des méthodes rencontrées afin de montrer la manière de travailler de chacune d'elles et surtout la vitesse à laquelle elle tourne.
La première méthode est l'exemple livré par Microsoft avec Visual Basic : WINSEEK.VBP.
Celle-ci utilise les contrôles DriveListBox, DirListBox et FileListBox pour effectuer ses recherches.
La deuxième est celle de CML'S RECHERCHER (source n°4404), que j'ai un peu modifié pour mes besoins.
Cette méthode utilise un contrôle ListBox, des fonctions FileSystemObject et la fonction DIR
La troisième méthode (et de loin la plus rapide) est celle provenant du fichier d'aide "apidocvb.chm" dont DARKSIDIOUS parle dans sa source n°5690, "Aide sur les principales API".
Celle-ci utilise les API. Elle permet de récupérer des noms de fichiers de type "~$ojet.doc" ce qui n'est pas le cas avec une FileBox.