[R] Distinguer dossier ou fichier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

[R] Distinguer dossier ou fichier

#1

Message par walkson »

Bonjour,
Je cherche le moyen de distinguer un dossier ou un fichier sachant que Windows accepte ces 2 formes:
C:\Temp\aa.xls comme dossier et C:\Temp\aa.xls comme fichier
Ma recherche m'a donné FileFindNextFile() par @extended permettant de déterminer un dossier ou un fichier comme ceci:

Code : Tout sélectionner

$SearchDir = "C:\Temp\aa.xls"
$hsearch = FileFindFirstFile($SearchDir)
$search = FileFindNextFile($hsearch)
If @extended = 1 Then
    MsgBox(0,"",$SearchDir & " est un dossier")
Else
    MsgBox(0,"",$SearchDir & " est un fichier")
EndIf
Ma question est donc de savoir s'il existe une autre méthode plus simple si possible.
Merci de vos réponses
Modifié en dernier par walkson le jeu. 11 sept. 2014 19:29, modifié 1 fois.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#2

Message par jguinch »

Code : Tout sélectionner

$SearchDir = "C:\Temp\aa.xls"

If StringInStr(FileGetAttrib($SearchDir), "D") Then
    MsgBox(0,"",$SearchDir & " est un dossier")
Else
    MsgBox(0,"",$SearchDir & " est un fichier")
EndIf
:wink:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#3

Message par walkson »

Bonjour jguinch
En effet, c'est beaucoup plus simple et je suppose que StringInStr(FileGetAttrib($SearchDir), "A") me renvoie sur un fichier...

Merci.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#4

Message par TomAijerrie »

walkson a écrit :et je suppose que StringInStr(FileGetAttrib($SearchDir), "A") me renvoie sur un fichier...
Pas vraiment,

FileGetAttrib($SearchDir) renvoie une chaine de caractères avec
- un "D" si la recherche est un dossier
- un "A" si la recherche est une archive (Tous les fichiers ne sont pas archives et certains dossiers le sont)( presque tous sur mon DD)
- un "R" si le fichier/dossier sont en lecture seule
- un "S" si il s'agit d'un fichier système
- un "H" si le fichier/dossier est caché
etc.
Regarde la doc (F1) pour plus d'infos

Pour avoir un fichier utilise plutôt

Code : Tout sélectionner

Not StringInStr(FileGetAttrib($SearchDir), "D")
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#5

Message par jguinch »

Non, car attribut A = "Le fichier/dossier est prêt à être archivé".
Il faut tout simplement tester si FileGetAttrib contient D ou non.

Sinon, _WinAPI_FileExists retourne @extended = 1 si c'est un dossier

Edit : grillé par TomAijerrie.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#6

Message par walkson »

C'est justement en regardant l'aide que j'ai déduit que "A" pouvait correspondre aux fichiers: déduction fausse (et paf!)
Sinon j'ai regardé _WinAPI_FileExists (#include <WinAPIFiles.au3>) qui me renvoit la fonction

Code : Tout sélectionner

Func _WinAPI_FileExists($sFile)
    If Not FileExists($sFile) Then Return 0
    If _WinAPI_PathIsDirectory($sFile) Then Return SetExtended(1, 0)

    Return 1
EndFunc   ;==>_WinAPI_FileExists
J'ai donc regardé _WinAPI_PathIsDirectory($sFile) et impossible de le trouver ! J'ai bien _WinAPI_PathIsDirectoryEmpty($sPath) mais point de _WinAPI_PathIsDirectory($sFile) J'ai parcouru l'include et celles qui l'accompagnent, en recherche par Scite ou en lisant, rien, pas de fonction équivalente. Dois je changer mes lunettes ou y a t' il une autre explication ?
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#7

Message par mikell »

#include <WinAPIFiles.au3>
renvoie à #include <WinAPIInternals.au3>
WinAPIEx Reference > Files & Devices Reference > Files Management > _WinAPI_PathIsDirectory
Retourne $FILE_ATTRIBUTE_DIRECTORY (guess what ?)

Pourquoi faire simple quand on peut faire compliqué ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#8

Message par walkson »

Excuse moi Mikell mais je n'ai pas compris ta réponse. :oops:
Je cherche le contenu de la fonction _WinAPI_PathIsDirectory qui devrait se trouver dans #include "WinAPIFiles.au3" et que je ne trouve pas.
Je ne recherche pas la complexité mais de comprendre le fonctionnement (appel à une Dll ?). Tu me conseillais, il y a quelques temps, de lire les includes pour mieux comprendre, c'est ce que je fais. :wink:
sinon la réponse de jguinch me convient tout à fait et je devine, par le retour
_WinAPI_PathIsDirectory ($FILE_ATTRIBUTE_DIRECTORY) que cette fonction est identique à sa proposition mais je cherche à comprendre tout simplement

Edit: Tu as du modifier ta réponse pendant que j'écrivais. Cependant, je ne comprend tjs pas car je ne trouve pas _WinAPI_PathIsDirectory dans WinAPIInternals.au3 ou ailleurs...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#9

Message par mikell »

Hum quelle est ta version d'Autoit ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#10

Message par walkson »

Je ne sais pas où on peut le trouver mais si c'est AutoIt3.exe, la version est 3.3.10.2
Sinon, si je fais
$repond = _WinAPI_PathIsDirectory($SearchDir)
MsgBox(0,"",$repond)
J'obtiens 16 correspondant à un dossier donc la fonction est là, mais où ?...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#11

Message par jguinch »

Attention, un include peut en cacher un autre :D
Lorsqu'on tu fais ton #Include <WinAPIFiles.au3> il fait lui-même appel à d'autres includes, comme WinAPIMisc.au3 (entre autres), qui lui-même fait appel WinAPIInternals.au3 : c'est ce dernier qui contient la fonction :wink:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#12

Message par mikell »

J'avais zappé l'étape du milieu :mrgreen:
Comme je visite beaucoup les includes je me suis fait un beau petit outil qui fait ce genre de recherche pour moi
L'automation peut avoir ses inconvénients....
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Distinguer dossier ou fichier

#13

Message par walkson »

J'ai la réponse à mon problème: il faut que je change de lunettes
En effet, jguinch, la fonction est bien là où tu le dis. Désolé de vous déranger pour rien :(
Mikell, je ne veux pas te forcer la main, mais ton beau petit outil, honnêtement, il m’intéresse... :mrgreen:

Merci à vous tous (et à votre patience...)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Distinguer dossier ou fichier

#14

Message par mikell »

Pas de problème :mrgreen:
Mais le bazar n'étant pas prévu pour être diffusé il est brut de décoffrage et pas fignolé, en plus il m'a servi de brouillon pour comprendre les SendMesssage sur Edit ^^
Mode d'emploi sommaire :
Pour rechercher dans un include, tu sélectionnes qqe chose ou tu le colles dans l'input et tu fais F3 le nombre de fois qu'il faut
Pour savoir dans quel include se trouve qqe chose, bouton "fouiller dans les includes", puis tu colles dans l'input, bouton "vazi", ensuite select la ligne de listview qui t'intéresse et bouton "select zis one"
Absence de bug(s) non garantie
Have fun :P
_Include viewer.au3
(12.55 Kio) Téléchargé 89 fois
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Re : [R] Distinguer dossier ou fichier

#15

Message par Tlem »

Bonsoir.
Sinon pour une recherche de fonction ou variables dans les includes, une recherche de texte brut à partir de Windows ou tout autre outil adapté amène aussi la réponse ...

Il existe d'ailleurs en AutoIt ce type d'outil (voir forum US). Il me semble qu'il s'appelle SearchMyFiles.

Recherche de fichiers dans le dossier C:\...\AutoIt3\Includes contenant le texte : Func _WinAPI_PathIsDirectory(

Envoyé depuis mon mobile en utilisant Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Distinguer dossier ou fichier

#16

Message par mikell »

Thierry, il y a des tas de petits softs disponibles sur internet qui ont - à peu près - le même genre de fonctionnalités :roll:
Mais je voulais un outil dédié, simple facile et rapide
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2127
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [R] Distinguer dossier ou fichier

#17

Message par TommyDDR »

Moi j'écris le nom de la fonction, un petit ctrl + alt + shift + i pour ajouter l'include et ctrl + j sur la fonction pour ouvrir le fichier la contenant.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Re : [R] Distinguer dossier ou fichier

#18

Message par Tlem »

@mikell
C'est bien ce que je dit au début du message : "ou tout autre outil adapté".

@TommyDDR
Bien, mais peut être pas encore suffisant pour certains. Peut être un script AutoIt qui a partir de SciTe4AutoIt permettrait avec une combinaison de touches d'afficher une fenêtre de saisie ou l'on rentre le nom de la fonction et le reste est automatique ...

Et pourquoi pas un truc qui lirait carrément la pensée, voir même ferait une prediction de recherche pour l'utilisateur ... ^^

Envoyé depuis mon mobile en utilisant Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Re : [R] Distinguer dossier ou fichier

#19

Message par walkson »

Tlem a écrit :Et pourquoi pas un truc qui lirait carrément la pensée
Je n'ose l'imaginer ! (lol)

@TommyDDR
Je ne veux pas mourir idiot donc j'ai essayé:

Code : Tout sélectionner

+> "Organize Includes" for AutoIt3 | Version 1.0.0.50 | © Th.Meger™ | 13.March.2010
!No udf path found : RegRead("HKCU\Software\AutoIt v3\Autoit", "Include")
>Exit code: 0    Time: 5.312
Par contre, le petit programme de Mikell marche à merveille
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Distinguer dossier ou fichier

#20

Message par mikell »

Bah, autant d'users autant de solutions diverses, chacun y allant de sa méthode personnelle ^^
Une liste - exhaustive ou pas - de ces méthodes ne présente alors qu'un intérêt très relatif
Le but d'un script Autoit c'est pas de réinventer la roue, c'est de produire un outil précis qui fait exactement ce qu'on veut sans fonctionnalités superflues
Et "un truc qui lirait carrément la pensée" c'est précisément ce que fait mon code (moyennant quand même 2 ou 3 clics) mais bien évidemment, c'est ma pensée à moi qu'il lit :mrgreen:

Edit
Apparemment il lit aussi un peu celle de walkson :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre