{"id":1839,"date":"2010-11-29T19:30:24","date_gmt":"2010-11-29T18:30:24","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=1839"},"modified":"2012-03-03T04:15:19","modified_gmt":"2012-03-03T03:15:19","slug":"supprimer-repertoires-trop-profonds","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2010\/11\/29\/supprimer-repertoires-trop-profonds\/","title":{"rendered":"Supprimer des r\u00e9pertoires"},"content":{"rendered":"<p>Durant le <a href=\"\/whiler\/2010\/11\/09\/codeway-4\/\">CodeWay 4<\/a>, Thierry nous a pr\u00e9sent\u00e9 plein de sessions dont une sur les nouvelles unit\u00e9s de <a target=\"_blank\" href=\"https:\/\/www.embarcadero.com\/fr\/products\/delphi\">Delphi<\/a>.<br \/>\nParmi ces unit\u00e9s, on trouve entre autres&nbsp;:<\/p>\n<ul>\n<li><a target=\"_blank\" href=\"https:\/\/docwiki.embarcadero.com\/RADStudio\/fr\/Utilisation_du_canevas_Direct2D\">Direct 2D<\/a><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/docwiki.embarcadero.com\/VCL\/en\/RegularExpressions\">Expressions r\u00e9guli\u00e8res<\/a><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/docwiki.embarcadero.com\/VCL\/fr\/IOUtils\">IOUtils<\/a><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/docwiki.embarcadero.com\/RADStudio\/en\/VCL_and_RTL_Changes_for_XE\">&#8230;<\/a><\/li>\n<\/ul>\n<p>Dans l&rsquo;apr\u00e8s-midi, un client m&rsquo;appelle et je lui demande de supprimer un  r\u00e9pertoire&#8230; il se retrouve bloqu\u00e9 par Windows qui refuse de supprimer les chemins d&rsquo;une trop grande taille (> 260 caract\u00e8res&#8230; Windows 7 est un peu plus malin, mais sous XP, c&rsquo;est assez bloquant&#8230;)<\/p>\n<p> (idea) Voila comment m&rsquo;est venu l&rsquo;id\u00e9e de d\u00e9velopper cette mini application qui m&rsquo;a permis de mettre en \u0153uvre deux des nouvelles unit\u00e9s&nbsp;:<\/p>\n<ul>\n<li>RegularExpressions qui me permet de facilement d\u00e9couper un chemin (SplitString, non, j&rsquo;connais pas  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/tongueout.gif\" alt=\":p\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> )<\/li>\n<li>IOUtils qui me donne les r\u00e9pertoires et fichiers<\/li>\n<\/ul>\n<p>L&rsquo;application compil\u00e9e peut \u00eatre r\u00e9cup\u00e9r\u00e9e \u00e0 partir de <a title=\"T\u00e9l\u00e9charger l'application\" href=\"https:\/\/www.whiler.com\/freewares\/download?wrd.exe\">ce lien<\/a>.<\/p>\n<p>Une partie du code source mettant en \u0153uvre ces unit\u00e9s&nbsp;:<br \/>\n<!--more--><br \/>\nUne <strong>expression r\u00e9guli\u00e8re<\/strong> pour d\u00e9couper les r\u00e9pertoires&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">ExpandPath<\/span><span class=\"br0\">&#40;<\/span>sPath<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span> bFocus<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; rePath &nbsp; <span class=\"sy1\">:<\/span> TRegEx<span class=\"sy1\">;<\/span><br \/>\n&nbsp; mPart &nbsp; &nbsp;<span class=\"sy1\">:<\/span> TMatch<span class=\"sy1\">;<\/span><br \/>\n&nbsp; tnCurrent<span class=\"sy1\">:<\/span> TTreeNode<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> bFocus <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; tvPath<span class=\"sy1\">.<\/span><span class=\"me1\">SetFocus<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Ajout du backslash final<\/span><br \/>\n&nbsp; sPath <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">StringReplace<\/span><span class=\"br0\">&#40;<\/span>sPath <span class=\"sy3\">+<\/span> <span class=\"st0\">'\\'<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">'\\'<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">'\\'<\/span><span class=\"sy1\">,<\/span> <span class=\"br0\">&#91;<\/span>rfReplaceAll<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ On segmente le chemin par r\u00e9pertoire<\/span><br \/>\n&nbsp; rePath &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TRegEx<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'([^\\\\]+\\\\)'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; mPart &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> rePath<span class=\"sy1\">.<\/span><span class=\"me1\">Match<\/span><span class=\"br0\">&#40;<\/span>sPath<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; tnCurrent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> tvPath<span class=\"sy1\">.<\/span><span class=\"me1\">Items<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">GetFirstNode<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">while<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>mPart<span class=\"sy1\">.<\/span><span class=\"me1\">Success<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">and<\/span> <span class=\"br0\">&#40;<\/span>tnCurrent &lt;&gt; <span class=\"kw1\">nil<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">do<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">ImageIndex<\/span> <span class=\"kw1\">of<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span><span class=\"sy1\">:<\/span> <span class=\"co1\">\/\/ Lecteur<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw3\">LowerCase<\/span><span class=\"br0\">&#40;<\/span>mPart<span class=\"sy1\">.<\/span><span class=\"me1\">Groups<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">=<\/span> <span class=\"kw3\">LowerCase<\/span><span class=\"br0\">&#40;<\/span>tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">Expand<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">False<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> bFocus <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">Selected<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">MakeVisible<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">getFirstChild<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mPart <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> mPart<span class=\"sy1\">.<\/span><span class=\"me1\">NextMatch<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">getNextSibling<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy1\">:<\/span> <span class=\"co1\">\/\/ R\u00e9pertoire<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">LowerCase<\/span><span class=\"br0\">&#40;<\/span>mPart<span class=\"sy1\">.<\/span><span class=\"me1\">Groups<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">=<\/span> <span class=\"kw3\">LowerCase<\/span><span class=\"br0\">&#40;<\/span>tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'\\'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">or<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"kw3\">LowerCase<\/span><span class=\"br0\">&#40;<\/span>mPart<span class=\"sy1\">.<\/span><span class=\"me1\">Groups<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">=<\/span> <span class=\"kw3\">LowerCase<\/span><span class=\"br0\">&#40;<\/span>GetFileName<span class=\"br0\">&#40;<\/span>TShortPath<span class=\"br0\">&#40;<\/span>tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">Data<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">ShortPath<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'\\'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">Expand<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">False<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> bFocus <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">Selected<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">MakeVisible<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">getFirstChild<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mPart <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> mPart<span class=\"sy1\">.<\/span><span class=\"me1\">NextMatch<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tnCurrent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">getNextSibling<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; tnCurrent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> tnCurrent<span class=\"sy1\">.<\/span><span class=\"me1\">getNextSibling<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Une autre pour r\u00e9cup\u00e9rer le nom de fichier :<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">function<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">GetFileName<\/span><span class=\"br0\">&#40;<\/span>sPath<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; reFilename &nbsp; &nbsp;<span class=\"sy1\">:<\/span> TRegEx<span class=\"sy1\">;<\/span><br \/>\n&nbsp; mFilename &nbsp; &nbsp; <span class=\"sy1\">:<\/span> TMatch<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; reFilename <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TRegEx<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'.*\\\\(.*)$'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; mFilename <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> reFilename<span class=\"sy1\">.<\/span><span class=\"me1\">Match<\/span><span class=\"br0\">&#40;<\/span>sPath<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> mFilename<span class=\"sy1\">.<\/span><span class=\"me1\">Success<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> mFilename<span class=\"sy1\">.<\/span><span class=\"me1\">Groups<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>et l&rsquo;utilisation d&rsquo;un <strong>TDirectory<\/strong> pour obtenir les r\u00e9pertoires, puis les fichiers&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">PopulateChildren<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">var<\/span> tnItem<span class=\"sy1\">:<\/span> TTreeNode<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; sdaDirectories<span class=\"sy1\">:<\/span> TStringDynArray<span class=\"sy1\">;<\/span><br \/>\n&nbsp; sdaFiles &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> TStringDynArray<span class=\"sy1\">;<\/span><br \/>\n&nbsp; sDirectory &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; sFile &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; sCurrentPath &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; tvContainer &nbsp; <span class=\"sy1\">:<\/span> TTreeView<span class=\"sy1\">;<\/span><br \/>\n&nbsp; tnPrevious &nbsp; &nbsp;<span class=\"sy1\">:<\/span> TTreeNode<span class=\"sy1\">;<\/span><br \/>\n&nbsp; opCurrent &nbsp; &nbsp; <span class=\"sy1\">:<\/span> TShortPath<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; sCurrentPath <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> GetShortPath<span class=\"br0\">&#40;<\/span>tnItem<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; tvContainer &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TTreeView<span class=\"br0\">&#40;<\/span>tnItem<span class=\"sy1\">.<\/span><span class=\"me1\">Owner<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Owner<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ On supprime les valeurs pr\u00e9c\u00e9dentes<\/span><br \/>\n&nbsp; tnItem<span class=\"sy1\">.<\/span><span class=\"me1\">DeleteChildren<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"co1\">\/\/ R\u00e9cup\u00e8re les r\u00e9pertoires en racine<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; sdaDirectories <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TDirectory<span class=\"sy1\">.<\/span><span class=\"me1\">GetDirectories<\/span><span class=\"br0\">&#40;<\/span>sCurrentPath<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">except<\/span> <span class=\"kw1\">on<\/span> E<span class=\"sy1\">:<\/span> Exception <span class=\"kw1\">do<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Chemin d\u00e9truit depuis ou lien symbolique<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ on le d\u00e9truit<\/span><br \/>\n&nbsp; &nbsp; &nbsp; tnPrevious <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> tnItem<span class=\"sy1\">.<\/span><span class=\"me1\">getPrevSibling<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; tnItem<span class=\"sy1\">.<\/span><span class=\"me1\">Delete<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; tnItem <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> tnPrevious<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Exit<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">for<\/span> sDirectory <span class=\"kw1\">in<\/span> sdaDirectories <span class=\"kw1\">do<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">with<\/span> tvContainer<span class=\"sy1\">.<\/span><span class=\"me1\">Items<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">AddChild<\/span><span class=\"br0\">&#40;<\/span>tnItem<span class=\"sy1\">,<\/span> GetFileName<span class=\"br0\">&#40;<\/span>sDirectory<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">do<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; ImageIndex &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">2<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; SelectedIndex <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">3<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; opCurrent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TShortPath<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">ExtractShortPathName<\/span><span class=\"br0\">&#40;<\/span>sDirectory<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Data <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> opCurrent<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"co1\">\/\/ R\u00e9cup\u00e8re les fichiers en racine<\/span><br \/>\n&nbsp; sdaFiles <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TDirectory<span class=\"sy1\">.<\/span><span class=\"me1\">GetFiles<\/span><span class=\"br0\">&#40;<\/span>sCurrentPath<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">for<\/span> sFile <span class=\"kw1\">in<\/span> sdaFiles <span class=\"kw1\">do<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">with<\/span> tvContainer<span class=\"sy1\">.<\/span><span class=\"me1\">Items<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">AddChild<\/span><span class=\"br0\">&#40;<\/span>tnItem<span class=\"sy1\">,<\/span> GetFileName<span class=\"br0\">&#40;<\/span>sFile<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">do<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; ImageIndex &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">4<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; SelectedIndex <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">5<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; opCurrent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TShortPath<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">ExtractShortPathName<\/span><span class=\"br0\">&#40;<\/span>sDirectory<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Data <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> opCurrent<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2010\/08\/stat_sys_warning_red.png\" alt=\"Attention !!!\" title=\"Attention !!!\" width=\"32\" height=\"32\" class=\"size-full wp-image-1503\" \/> La suppression d\u00e9finitive, les r\u00e9pertoires et fichiers ne vont pas dans la corbeille&#8230; V\u00e9rifiez bien lors chemin lors du message de confirmation&nbsp;!<br \/>\nJ&rsquo;ai test\u00e9 sur mon C:\\ avec un peu trop d&rsquo;efficacit\u00e9 <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/tmi.gif\" alt=\"(tmi)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<p><center><a href=\"\/whiler\/category\/computer\/delphi\/\" title=\"Articles concernant Delphi\"><img loading=\"lazy\" decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2009\/10\/built_with_delphi.png\" alt=\"D\u00e9velopp\u00e9 en Delphi\" title=\"D\u00e9velopp\u00e9 en Delphi\" width=\"125\" height=\"51\" class=\"size-full wp-image-2721\" \/><\/a><\/center><\/p>\n<div class=\"thanks_button_div\" \n                  style=\"float: right; margin-right: 10px; margin-top:10px;\"><div id=\"thanksButtonDiv_1839_1\" style=\"background-image:url(https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/thanks_compact_brown1.png); background-repeat:no-repeat; float: left; display: inline;\"\n                onmouseover=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_1839_1', true);\" \n                onmouseout=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_1839_1', false);\"\n                onclick=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_1839_1', false);\" >\n                <input type=\"button\" onclick=\"thankYouButtonClick(1839, 'You left &ldquo;Thanks&rdquo; already for this post')\" value=\"Merci\u00a0 0\"\n                  class=\"thanks_button thanks_compact thanks_brown1\"\n                  style=\"  font-family: Verdana, Arial, Sans-Serif; font-size: 14px; font-weight: normal;; color:#00f;\"\n                  id=\"thanksButton_1839_1\" title=\"Click to leave &ldquo;Thanks&rdquo; for this post\"\/>\n             <\/div><div id=\"ajax_loader_1839_1\" style=\"display:inline;visibility: hidden;\"><img decoding=\"async\" alt=\"ajax loader\" src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/ajax-loader.gif\" \/><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Durant le CodeWay 4, Thierry nous a pr\u00e9sent\u00e9 plein de sessions dont une sur les nouvelles unit\u00e9s de Delphi&#8230;<br \/>\nDans l\u2019apr\u00e8s-midi, un client m\u2019appelle et je lui demande de supprimer un r\u00e9pertoire\u2026 il se retrouve bloqu\u00e9 par Windows qui refuse de supprimer les chemins d\u2019une trop grande taille (> 260 caract\u00e8res\u2026 Windows 7 est un peu plus malin, mais sous XP, c\u2019est assez bloquant\u2026)<br \/>\nVoila comment m\u2019est venu l\u2019id\u00e9e de d\u00e9velopper cette mini application qui m\u2019a permis de mettre en \u0153uvre deux des nouvelles unit\u00e9s&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[7,6],"tags":[27,154,93,108,151],"class_list":["post-1839","post","type-post","status-publish","format-standard","hentry","category-delphi","category-dev","tag-coloration-syntaxique","tag-delphi","tag-freeware","tag-script","tag-windows-7"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/1839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/comments?post=1839"}],"version-history":[{"count":0,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/1839\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=1839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=1839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=1839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}